Sometimes we run commands like git reset --hard HEAD~
when we shouldn't
have. We wish we could undo what we've done, but the commit we've reset is
gone forever. Or is it?
When bad things happen, git-reflog
can often lend a hand. Using
git-reflog
, we can find our way back to were we've been; to better times.
$ git reflog
00f77eb HEAD@{0}: reset: moving to HEAD~
9b2fb39 HEAD@{1}: commit: Add this set of important changes
...
We can see that HEAD@{1}
references a time and place before we destroyed
our last commit. Let's fix things by resetting to that.
$ git reset HEAD@{1}
Our lost commit is found.
Unfortunately, we cannot undo all the bad in the world. Any changes to tracked files will be irreparably lost.