tags:

views:

49

answers:

2

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.

+3  A: 

Check git reflog. Pretty sure that you can just walk back in time using those commit hashes as a reference in almost all cases.

I'd physically copy the git repo elsewhere as a place to do preliminary testing to see what will work, that way you won't get it into a state that you -can't- come back from (assuming that you haven't already).

Tchalvak
+3  A: 

You should be able to get the SHA1 of your most recent commits (that disappeared after the 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.

VonC