Git合并策略'他们'不解决修改/删除冲突

Cra*_*tis 21 git

git merge使用以下选项执行a 时:

git merge -X theirs master

偶尔会有冲突的文件:

CONFLICT(修改/删除):在master中删除File_A.java并在HEAD中修改.File_A.java的版本HEAD留在树中.

但是,我希望-X theirs在这些情况下识别该选项,并使用theirs更改的版本,该版本用于删除该文件.

是否有原因导致此类冲突无法自动解决,特别是因为我提供了一个特定的合并策略,建议它应该删除该文件?

此外,如何(如果可能)我可以更新我的merge命令以使用theirs此类冲突的版本?

fou*_*nes 8

有点晚了,但可能有用,您可以使用以下方法解决此类冲突:

git merge -X theirs master
git diff --name-only --diff-filter=U | xargs git rm
Run Code Online (Sandbox Code Playgroud)

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


max*_*630 5

看起来像策略的theirs选项recursive(这是你实际使用的,见[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