git使用reflog恢复rebase

时间:2015-09-02 21:29:56

标签: git git-rebase

由于冲突解决得到了极大的错误,我在一个长期互动的rebase流程中流产。

我注意到,每次refase为git rebase --continue d时,reflog都会引用。

如何从上一次成功的--continue点恢复重新定位,以便保留以前的rebase冲突解决方案? (如果我从头再次运行rebase命令,我将不得不手动解决我第一次经历它时已经解决的所有冲突)

示例:

假设交互式rebase如下所示(其中000002已成功解析且0000004是如此彻底的灾难,导致rebase中止)

edit 000001 Edit to this commit
pick 000002 Easy merge conflict, resolved
pick 000003 Commit 3
pick 000004 Really ugly merge conflict, Abort!
pick 000005 Commit 5

reflog现在看起来像这样

HEAD@{0}: rebase: aborting
HEAD@{1}: rebase -i (pick): updating HEAD
HEAD@{2}: rebase -i (pick): updating HEAD
HEAD@{3}: rebase -i (edit): updating HEAD
HEAD@{4}: rebase -i (start): checkout 000000

我想要做的是git reset --hard HEAD@{1}并继续原始的rebase过程,给出"真正难看的合并冲突"另一次尝试(继续选择000005)。

1 个答案:

答案 0 :(得分:1)

Rebase没有内置任何内容来执行此操作,并且“正确”执行此操作有点棘手,但通过创建 new 分支指向可以轻松实现“错误”操作对你喜欢的rebase的一部分:

 $('#register-form').on('submit', function(){
   $(this).prop('disabled', true);
 });

现在您可以查看分支$ git branch newbr HEAD@{1} 并使用newbr启动丑陋合并冲突版本。缺点是您必须手动git cherry-pick要引入的提交集(在本例中为4和5)。

(一旦你把所有东西都包含在新分支中,只需将原始分支重新指向新的最终提交 - 这是新分支的提示 - 就像git cherry-pick成功时一样。然后,您可以删除新分支,因为您的手动模式rebase已完成。)