我有一个包含300多个冲突文件的大合并。我想使用Mergetool解决这些冲突,但我不可能在一次会议中全部解决完。如何提交合并请求,并稍后返回并继续相同的合并请求?通常情况下,如果索引中存在冲突,git不允许你提交。
我猜您所说的“不能一次完成”实际上是指“想在完成之前做一些其他事情”,因为否则您可以将部分解决的合并保留在工作树中。
首先,在您付出任何努力之前,请注意,您可以简单地创建另一个克隆库——部分解决的合并可以留在其中一个库中,您可以在另一个库中进行其他工作。
尽管如此,如果您确实想要保存已经解决部分合并的工作,我的最佳建议是使用git rerere
(REuse REcorded REsolutions)。
要开始使用,请确保将rerere.enabled
设置为true-这将涵盖大多数常规用例。它会导致git rerere
在合并冲突发生后立即自动运行-此时,您将看到形式如Recorded preimage for '<path>'
的消息。当您提交合并时,它也会自动运行;然后,您将看到形式如Recorded resolution for '<path>'。
的消息。稍后,当相同的有冲突的Hunk出现时,这些解决方案就可以被重用。
在您的用例中,第一个自动触发器将启动-预映像将被记录。但您还没有准备好提交合并,因此在解决一些有冲突的文件并将它们标记为已解决(将它们添加到索引)之后,您可以直接运行git rerere
(无参数)。 它将为您标记为已解决的所有内容记录解决方案,但会忽略任何仍未解决的问题。然后,您可以简单地销毁尝试的合并(git reset --merge
),下次尝试时,记录的解决方案将被重用!
rerere
更改是本地记录的。有没有办法将它们存储在提交中?此外,您是否知道我是否可以在合并过程中打开此功能? - Reed G. Lawrerere
没有启用,使用它将会很棘手-我能想到的唯一办法就是在克隆中重新执行合并,并复制您已经解决的内容。而且正如你所说,这是本地存储。对于以提交形式提出部分合并的建议...老实说,我会把它弄乱:从git status
或git status --porcelain
中转储未解决的冲突列表,然后添加所有东西,就好像它已经被修复了,并提交它,理解它在真正发布之前将被修改。 - Cascabelgit reset HEAD^
),然后重新开始工作-知道所有“本地修改”都是冲突。 - Cascabel