撤消git rebase --skip - 在rebase期间重新应用提交

时间:2014-02-11 14:58:18

标签: git git-rebase

我做了很长时间git rebase很多提交。我不小心--skipped提交了一些我已经解决的冲突。我应该做git rebase --continue

是否有办法在此rebase阶段重新应用此前一次提交,然后继续rebase?

我看到的一种方式是

  1. 此时通过在最后一次正确应用的提交上创建分支来停止rebase
  2. 从先前跳过的提交开始重新启动rebase。
  3. 或者我可以在一个篮筐阶段做一个樱桃挑选吗?

2 个答案:

答案 0 :(得分:27)

我找到了“为我工作”的方式:

在rebase期间,.git/rebase-apply目录中发生了很多事情。除此之外,还有一个名为next的文件。 next包含一个数字,该数字对应于驻留在.git/rebase-apply中的文件。此文件包含有关当前正在处理的提交的信息。例如:

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

Git似乎保留了作为上述文件跳过的提交。而对应于已经应用的提交的文件不再存在。我意外跳过的提交被称为0259,文件仍然存在。

这是我做的:

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

有了这个我告诉git当前处理了第258次提交(之前正确应用了)。然后我做了

$ git rebase --skip

告诉git忘记这个,瞧,我可以再次处理跳过的提交,纠正冲突和--continue。它起作用了。

答案 1 :(得分:17)

Git很棒,因为它可以保存基本上你所提交的所有内容的日志。

  1. 在&#34; .git / logs / HEAD &#34;中找到您的提交内容并在文本编辑器中打开

  2. 在HEAD文件中找到您的SHA

      

    3c8c ... 2260dc ... 全名{my.email@email.com} 1471276956 -0600提交:保存审判1,2,3

  3. 键入(注意类型足够sha,所以git知道要拉哪个):

      

    git checkout -b recovery 2260d ...

  4. 请参阅链接以供参考:http://blog.screensteps.com/recovering-from-a-disastrous-git-rebase-mistake