Recovering lost files after a git reset –hard


This morning I’ve messed things up in my env…

I did a commit yesterday and thought I had pushed it, but not.
Today I did a git pull and was asked to do a merge, because there were changes in the remote.

I totally ignored this (don’t ask me why, perhaps absence of coffee…) and did a git reset –hard HEAD^^

So, yep, I lost my commit that existed only in my machine (this commit in particular was a file addition).

After blaming myself a lot, and a bit of google search, I’ve found this amazing blog post: http://zsoltfabok.com/blog/2012/06/recover-deleted-files-with-git/

I’m summarizing here the steps to have your commit (in my case, the file) back:

git fsck --no-reflog

This command will return a hash for the lost commit, something like

dangling commit fafeade9f348b18f37835ab49dab40172efde693

You can use this hash to do a checkout, for instance, and recover your file. \o/

So, let’s have a bit of coffee now 🙂

6 thoughts on “Recovering lost files after a git reset –hard”

  1. git records all head changes to .git/logs/refs/heads/$HEAD, so as long as the orphaned commits aren’t garbage collected, recovering from hard resets is easy.

  2. I think the lesson here sould be that you should do a `git rebase` rather than `git merge` after pulling remote. `git pull –rebase` should take care of it for you.

Comments are closed.