git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Recovering Committed Changes in a Detached Head?

From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Date
Oct 9, 2011, 08:12 UTC
Message-ID
<vpqvcry4m8p.fsf@bauges.imag.fr>
In-Reply-To
<ab706826-75df-4410-941e-6b40ec92713c@email.android.com>
Martin Fick <mfick@codeaurora.org> writes:
Show 20 quoted lines
>>git reflog to the rescue.  For your example above it will output
>>something like this:
>>
>>deadbeef HEAD@{0}: checkout: moving from
>>92aa5381b9f7229523dba42aa94735c30f173451 to New_Branch
>>  92aa5381 HEAD@{1}: commit: Committing this in the Detached Head
>>3a5bb38a HEAD@{2}: checkout: moving from master to
>>3a5bb38a83c00f7acab573f0ec836577143200aa
>>  deafbabe HEAD@{3}: ...
>>  ...
>>
>>There you see the first line of the commit message from your "lost"
>>commit, and you can do
>>
>>  git checkout -b lost_detached_head 92aa5381
>>
>>and you get a branch pointing to that commit you made while on
>>detached head, and you can work with it as usual.
>
> While rflog is cool, I can't help but think that git could be even more helpful for these scenarios.

Git has been showing a big scary warning when entering detached HEAD, and now has another helpful one when leaving a commit orphan:

$ git checkout HEAD^
Note: checking out 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name
HEAD is now at adcbd2f... foo
$ date > foo.txt; git add foo.txt; git commit -am "commited on detached HEAD"
[detached HEAD 9e9c4ef] commited on detached HEAD
 1 files changed, 1 insertions(+), 1 deletions(-)
$ git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
  9e9c4ef commited on detached HEAD

If you want to keep them by creating a new branch, this may be a good time to do so with:

 git branch new_branch_name 9e9c4efeca049ca559541595c9ca4a3380dee523
Switched to branch 'master'

(since 8e2dc6ac06ae90, Junio C Hamano, Fri Feb 18 16:04:47 2011, commit: give final warning when reattaching HEAD to leave commits behind)

I think these warnings are (scary and big) enough.
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Previous: Ronan KeryellNext: Junio C Hamano
Message 8 of 10 in “Recovering Committed Changes in a Detached Head?”
  1. Daly GutierrezOct 8, 2011
  2. SZEDER GáborOct 8, 2011
  3. Martin FickOct 8, 2011
  4. Joel C. SalomonOct 9, 2011
  5. Martin FickOct 9, 2011
  6. Nguyen Thai Ngoc DuyOct 9, 2011
  7. Ronan KeryellOct 9, 2011
  8. Matthieu MoyOct 9, 2011
  9. Junio C HamanoOct 9, 2011
  10. Miles BaderOct 10, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.