Roll Back an Accidental Git Rebase
Ok, so earlier today I wanted to change something in a previous commit to one of my git repos (none of the changes in this series of commits had been uploaded to a remote repo yet, don't worry!), so I did an interactive rebase. I realized I didn't want to do the change just yet, so I quit my editor without saving, and so thought I had aborted the rebase. Boy, was I wrong. I now had a messed up commit history on my hands and had no idea what to do.
So I headed over to the #git IRC channel over at irc.freenode.net and came back with this little gem:
First off, here's what my original tree looked like before the rebase:
Also, here's the rebase message that I had:
I was tired and forgot to delete all the commits that were going to be part of the rebase, so when I hit :q!, I ended up unintentionally rebasing. Here's what that looked like when the rebase was complete:
Needless to say, I messed up big time. Now what? Well, that's where this tip begins:
My first step was to get a log of all my previous commits.
git reflog
Which gave me the following output:
From there, I needed to figure out what commit I want to reset my history to. In this case, since my original position in the tree was "cbe2593", I'm going to use HEAD@{10}. You can also use the SHA1 sum of the commit you want to roll back to.
After that, I needed to do a hard reset on my repo, which took me back to the commit I had done just before the rebase.
git reset --hard [commit]
So in this case, I entered:
git reset --hard HEAD@{10}
Volia! Once again I had a clean commit history.
Written by Nick Smith
Related protips
2 Responses
You just saved me wasting a bunch of hours of work :)
@nuisanceofcats I'm glad this helped you. :)