批量解决剩余的合并冲突,因为已删除的文件是“我们的”

时间:2016-04-13 04:28:48

标签: git git-extensions git-merge-conflict

有没有办法说'对于所有剩余的合并冲突',选择'我们的'作为合并冲突解决方案? 在我的情况下,“我们的”也是删除,而不是编辑。

我正在使用Git Extensions,只需要一点命令行。 当我进行合并时,我会经历一系列复杂的过程以解决合并问题。 对于一个进程,总会有一组文件在合并中会发生冲突,因为在我的分支上,我正在删除它们。

通常,我运行合并,看到我有冲突,然后从我的存储库中删除特定文件,同时还合适地合并一些其他冲突的文件。

然后,当我确定我的本地文件系统是正确的时,我已经进入Git Extensions,并在每个合并冲突的文件上选择合并,并选择“我们的”(已删除)...逐个。 ...(Git Extensions不允许我多选)。 有很多文件...所以我正在寻找一种方法,我可以基本上做一个批量'合并 - >我完成其他合并后,我们所有剩余的合并冲突。

1 个答案:

答案 0 :(得分:0)

我不知道如何在GUI中执行此操作,但在命令行上:

git checkout HEAD -- path1 path2 path3 path4 ...

(采用"我们的"版本)或:

git checkout MERGE_HEAD -- path1 path2 path3 path4 ...

(以"他们的"版本)。

如果"我们的"版本是删除(如在您的描述中),只是:

git rm path1 path2 ...

使用&#34设置索引;解决方法是删除文件"。

要添加的

修改(在两条评论之后):git checkout --oursgit checkout --theirs也可用于代替git checkout HEADgit checkout MERGE_HEAD。差异(有一个)是微妙的:当您处于冲突合并的中间时,索引包含每个 path 的暂存槽1,2和/或3中的条目有冲突的。对于未冲突的路径,索引只有一个阶段为零的条目。使用--ours--theirs签出提取暂存条目,同时从HEADMERGE_HEAD签出可从指定的中提取文件提交(更准确地说,来自与提交相关联的树)。

第1阶段条目是合并基础,第2阶段是--ours,第3阶段是--theirs。如果冲突是修改,则使用所有三个临时插槽。如果冲突是delete-vs-modify,则正在使用暂存插槽1,但其中一个插槽未使用。如果冲突是create-vs-create,则插槽1为空,而插槽2和3将填充。

执行git rmgit checkout清除冲突暂存槽并使用已解析的结果填充正常的stage-0条目。只有当没有冲突的阶段时,Git才允许最后的合并提交(git ls-files --stage只显示阶段0)。

讨厌图形用户界面的众多原因之一是他们可能会拒绝重新检查索引,认为他们知道什么是最好的(他们从来没有这样做)。如果您是这样的,它可能会忽略您所做的所有CLI解析,并要求每个解决方案都通过GUI本身。