How to reset a git branch to a given previous commit and fix the detached HEAD

git

I needed to reset my branch to an earlier working state (commit) so I did:

git reset --hard c70e611

Now I see

HEAD detached at c70e611
nothing to commit, working directory clean

How to fix / understand / get around the detached head message and push so that c70e611 is now the latest commit I am using and represents the HEAD of the branch I am working in (not master).

Best Answer

HEAD detached at c70e611

This is because when you did the git reset --hard, you were not on any branch at that time. You had a detached HEAD, and that detached head got moved with the git reset --hard command, along with a rewrite of your working tree to that state.

If you want some branch foo to be c70611, then:

git checkout foo
git reset --hard c70611

If this is considered to be a good state to push to foo's upstream then just git push <remote-name> foo.

There is a more direct way to force foo to c70611 without checking it out to be the current branch. Namely, you can rewrite what foo points to using the git update-ref command.

Before doing any of the above, I would pause and try to see how I had ended up in a detached state without noticing. Perhaps it was an unfinished rebase or whatever. Step one is to review the last few entries in the git reflog to help jog your memory.

Related Question