The last day of the workday of last week, my colleague told me that he lost his previous two days of work because he reset his local git commit to a prior one without pushing his work to the remote first. Upon receive this alarming news, while I have many other things to finalize, honestly my heart was virtually fall out. Fortunately, I believe in the power of git that it must be able to restore this thing! And sure enough, it turned out very easy to do:
1. This assuming you are not yet run “git gc” ( garbage collector), so all the dangling commits are still available.
2. Run the “git reflog” command (reflog starnds for reference log). This will list of series of history commits with short commit messages and SHA1s, including all those dangling commits. The short commit message is very helpful because normally you won’t remember your commit’s SHA1, but you recognize your commit message.
3. Find the commit SHA1 you want to restore. For example, assume our commit needs to be restored here is [SHA33ddf]
- 4. run “git branch [branchName] [SHA33ddf]”, this will create a new branch with the head point to this commit’s SHA1. Your work has magically restored!
- 5. The last step would be setting up your new branch for tracking with the corresponding remote branch: “git branch -u upstream/branchName branchName”, assuming upstream is your remote origin.