2011-02-14 95 views
10

我有一个大的合并进行超过300个冲突的文件。我想用mergetool来解决这些问题,但是我无法一次性完成它。我如何提交合并,然后再回来并继续相同的合并?通常情况下,如果索引中存在冲突,git似乎不允许您提交。如何在解决冲突的过程中提交长Git合并

+1

你也不能藏匿。 :( – 2011-02-14 20:48:38

回答

11

我假设“不能在一次就坐”,你实际上是指“在完成之前想做其他事情” - 因为你可以将部分解决的合并留在工作树中。

首先,在您遇到任何问题之前,请注意您可以简单地创建另一个存储库克隆 - 部分解析的合并可以保留在一个中,并且您可以在另一个中执行其他工作。所有这一切说,如果你真的想保存你所做的部分解决合并的工作,我最好的建议是使用git rerere(REuse REcorded REsolutions)。

要开始使用,请确保rerere.enabled设置为true - 这将覆盖大部分正常使用情况。这会导致git rerere在合并冲突发生后立即自动运行 - 此时您将看到形式为Recorded preimage for '<path>'的消息。它也会在您提交合并时自动运行;那么你会看到形式为Recorded resolution for '<path>'.的消息。这些解决方案可以在稍后出现相同的冲突人群时重新使用。

现在,在您的使用案例中,将会发生第一个自动触发 - 将记录preimages。但是你还没有准备好提交你的合并,所以在解决了一些有冲突的文件并将它们标记为已解决(将它们添加到索引)之后,你可以直接运行git rerere(无参数)直接。它会记录您标记为解决的所有内容的解决方案,但忽略任何尚未解决的问题。然后,您可以简单地销毁尝试的合并(git reset --merge),并在下次尝试合并时,录制的分辨率将被重复使用!

+1

哇,这太不可思议了,我的意思是我不希望在发生灾难的情况下在开发机器上留下一堆未提交的更改,我宁愿定期向上游方向推进,以便合作伙伴可以看到我的工作看完手册页后,看起来`rerere`的变化是在本地记录的,有没有什么办法将它们存储在提交中?还有,你有什么想法,是否可以在已经合并的中间? – 2011-02-14 21:46:45