Aborted old git rebase and lost commits since the rebase started

Crap! About a week ago, I was rebasing some commits while trying to clean up my repository, and apparently I didn't actually finish it. Today, a week and several commits later, I went to rebase to reorder a few commits from today, and it told me I was already in the middle of a rebase.

That should have been a cue to copy my repo just in case. But I did not...instead I ran git rebase --abort which sounded right at the time. Well, that was not right. It aborted the rebase from a week ago and reset master's HEAD to the old one. Dummy!

I've got several other branches that are fairly recent, and I've pushed to remote several times, but the most recent changes appear to be gone forever. I don't possess the appropriate level of git-fu to know if there's any way to recover my changes.

Am I screwed?

EDIT - WOW! Thanks guys! git reflog is awesome! I'm fully recovered...lesson learned. Marking Tchalvak's answer accepted for being the first to post.

19388 次浏览

Check git reflog. You can walk back in time using those commit hashes as a reference in almost all cases.

I'd also physically copy the git repo directory elsewhere as a place to do preliminary testing to see what will work, that way you can mess with whatever you want without losing untracked files or getting things into a state that you can't come back from.

You should be able to get the SHA1 of your most recent commits (that disappeared after the git rebase --abort) with a git reflog.

You will be able then to reset your current branch to those SHA1

# Suppose the old commit was HEAD@{2} in the ref log
git reset --hard HEAD@{2}

It is a bit like "Undoing a git reset --hard HEAD~1".

See also the "illustrated guide to recovering lost commits with Git", for other examples of recovery.