Undoing a git rebase --skip - reapply a commit during a rebase

前端 未结 2 964
一向
一向 2021-02-03 19:22

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 d

相关标签:
2条回答
  • 2021-02-03 20:01

    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 called next. 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:

    $ cat .git/rebase-apply/next
    0260
    $ less .git/rebase-apply/0260
    <info about the commit which is currently processed (and has conflicts)
    

    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:

    $ echo "0258" > .git/rebase-apply/next
    

    With that I told git that currently the 258th commit is processed (which previous applied correctly). Then I did

    $ git rebase --skip
    

    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.

    0 讨论(0)
  • 2021-02-03 20:07

    Git is great because it saves a log of basically everything you commit.

    1. Find your commit in ".git/logs/HEAD" and open in a text editor

    2. Find your SHA in the HEAD file

      3c8c... 2260dc... Full Name {my.email@email.com} 1471276956 -0600 commit: Saving Trial 1,2,3

    3. Type (note type enough of the sha so git knows which one to pull):

      git checkout -b recovery 2260d...

    See link for reference: http://blog.screensteps.com/recovering-from-a-disastrous-git-rebase-mistake

    0 讨论(0)
提交回复
热议问题