Git 合并策略"他们的"没有解决修改/删除冲突



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

git merge -X theirs master

偶尔会有像这样的冲突文件:

CONFLICT (modify/delete): File_A.java在master中被删除并被修改在头上。

File_A.java的版本头

但是,我希望在这些情况下可以识别-X theirs选项,并使用theirs版本的更改,这是为了删除文件。

这种类型的冲突没有自动解决,特别是,因为我提供了一个特定的合并策略,建议它应该删除文件,这有什么原因吗?

进一步,我如何(如果可能的话)更新我的merge命令来使用这种类型冲突的theirs版本?

有点晚了,但可能有用,您可以使用:

来解决此类冲突:
git merge -X theirs master
git diff --name-only --diff-filter=U | xargs git rm

基本意思是在冲突解决过程中"删除所有未合并的文件"

看起来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

进一步,我如何(如果可能的话)更新我的合并命令来使用他们的版本的这种类型的冲突?

你需要使用合并驱动程序
您需要在.gitattribute文件中创建您自己的驱动程序和内容。


这是一个相关的Q列表,可能对你有帮助。
每个人都从不同的角度看待这个问题

  • 告诉git对特定文件使用我们的合并策略
  • 。gitattributes,单个文件的合并策略
  • https://medium.com/@porteneuve how-to-make-git-preserve-specific-files-while-merging-18c92343826b # .sc08nj3ww

最新更新