Recover commits from git

Today I made a mistake.

I was preparing a PR and told git to:

  • soft reset my last commit (A)
  • stash commit A
  • hard reset commits (B, C, D)
  • stash pop commit A
  • add all files and commit
  • force push to origin

I thought I branched from the wrong starting point and was trying to correct that mistake. I was wrong. I was not in the correct branch and now just destroyed 3 commits (B, C, D) and removed them from origin.

Bugger!

With some help from my colleagues and some quick google searches I found the git reflog command. It shows the history of what you’ve done to your branch including resets. It only took a few seconds to find the SHA1 just before everything went wong.

Action Plan:

  • backup currently busted branch
  • hard reset back to identified SHA1
  • force push to origin
  • switch to backup branch
  • soft reset commit A
  • stash commit A
  • switch to correct branch
  • stash pop commit A
  • profit?

All told it took me longer to write this post than it did to fix my mistake and my Friday afternoon wasn’t doomed; that made me smile.

Written on July 20, 2018