I'm doing a long git rebase
with a lot of commits. I accidentally --skipped
a commit where there were some conflicts which I resolved. I should have done git rebase --continue
.
Is there are way to re-apply this previous commit during this rebase phase and then continue the rebase?
One way I see is to
- stop the rebase at this point by creating a branch on the last commit which was correctly applied
- restart the rebase starting with the previously skipped commit.
Or can I do a cherry-pick whilst being in a rebase-phase?
I found a way which "worked for me":
During a rebase lots of things are happening in the
.git/rebase-apply
directory. Amongst others there is a file callednext
.next
is containing a number which corresponds to a file which is residing in the.git/rebase-apply
as well. This file contains information about the commit which is currently being processed. For example:Git seems to keep the commits which are skipped as the above mentioned files. Whereas files corresponding to commits which have been applied are not there anymore. The commit I accidentally skipped was called 0259 and the file was still present.
Here is what I did:
With that I told git that currently the 258th commit is processed (which previous applied correctly). Then I did
to tell git to forget this one and, voila, I could again work on the skipped commit, correct the conflicts and
--continue
. It has worked.Git is great because it saves a log of basically everything you commit.
Find your commit in ".git/logs/HEAD" and open in a text editor
Find your SHA in the HEAD file
Type (note type enough of the sha so git knows which one to pull):
See link for reference: http://blog.screensteps.com/recovering-from-a-disastrous-git-rebase-mistake