2014-02-11 191 views
6

我正在做很长的提交git rebase。我不小心--skipped一个承诺,我遇到了一些冲突。我应该完成git rebase --continue撤销git rebase --skip - 在rebase期间重新应用提交

有没有办法在这个重组阶段期间重新应用此先前的提交,然后继续进行rebase?我看到

一种方法是

  1. 创建的最后一个分支提交停在这一点上,底垫这是正确应用
  2. 重启底垫开始与先前跳过的提交。

或者我可以做一个樱桃选择,而处于rebase阶段?

回答

8

我找到了一种方法,其“为我工作”:

在衍合很多事情在.git/rebase-apply -path正在发生。其中有一个文件叫nextnext包含的数字对应于驻留.git/rebase-apply-path的文件。该文件包含有关当前正在处理的提交的信息。例如:

$ 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 rebase --skip 

通知Git忘记这一个,瞧,我可以再次跳过的工作承诺,纠正冲突和--continue。它工作。

+0

这在最近版本的Git改变了一点,但我仍然能够使其通过调整这些文件的工作:'混帐底垫,todo'和按照上面的想法“上”。 – goncalossilva

+0

使用git版本'1.9.4.msysgit.1'我可以通过Patrick B.的方法获得成功,我既没有使用'git-rebase-todo'也没有''到''。 – codingdave

+0

恐怕在git rebase --skip之后,这是不可能的。至少对于我来说。我的“.git”文件夹中没有“rebase-apply” – riroo

4

Git非常棒,因为它可以保存基本上所有提交的日志。

  1. 找到你的承诺在 “的.git /日志/ HEAD”,打开一个文本编辑器

  2. 发现在头文件的SHA

    3c8c ...... 2260dc ...全名{[email protected]} 1471276956 -0600提交:保存试用版1,2,3

  3. 类型(注类型足够的沙这样混帐知道拉哪一个):

    git的结帐-b恢复2260d ...

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

+0

您节省了2天的工作时间! –