Git合并策略“theirs”未解决修改/删除冲突。

45
执行以下选项的git merge时:

git merge -X theirs master

有时会出现下面这样的冲突文件:

CONFLICT (modify/delete): File_A.java 在主分支中被删除并在HEAD中修改。版本File_A.java(HEAD)留存在树中。

然而,我希望在这些情况下能够识别-X theirs选项,并使用theirs的更改版本,即将文件删除。 是否有理由不自动解决此类冲突,尤其是因为我提供了一个特定的合并策略,建议删除该文件? 此外,如何(如果可能)更新我的merge命令以使用此类型冲突的theirs版本?

可能是重复的问题:脚本自动合并两个git分支? - Paul Sweatte
3个回答

25

可能有点晚,但可能会有用。您可以通过以下方式解决此类冲突:

git merge -X theirs master
git diff --name-only --diff-filter=U | xargs git rm

基本上,它在冲突解决期间意味着“删除所有未合并的文件”。


9
看起来,recursive策略的theirs选项(这是实际使用的选项,请参见[1])似乎不影响树合并,仅在仅修改文件内容时用于文件内容合并。我不知道是否有任何合并命令选项可以做到您想要的。您可以尝试编写一个脚本,扫描冲突的文件(使用git status --porcelain),然后删除文件(git rm --force <file>)或获取其远程版本(git checkout --theirs <file>)。
[1]https://www.kernel.org/pub/software/scm/git/docs/git-merge.html#_merge_strategies

0
另外,如果可能的话,我该如何更新我的合并命令以使用此类型冲突的“theirs”版本?
您需要使用合并驱动程序
您需要在.gitattribute文件中创建自己的驱动程序和配置。

以下是一些相关问题的列表,可能对你有帮助。
每个问题从不同的角度阐述了这个问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接