Git合并策略忽略已删除的文件

Vla*_*kov 20 git merge

我有一个特殊的分支(发布分支),它是master分支的精确副本,删除了一些文件和目录.此分支上没有发生任何开发,但它必须与master同步,因此master上的更新必须不断推送到该分支.

通过正常的merge(git merge master)我不断得到像(例如一个示例README文件)的冲突:

CONFLICT (delete/modify): README deleted in HEAD and modified in master

这是预期的:我尝试合并文件中的更改,我已删除.所以,要解决它们,我会使用它git rm README.

为了使其自动化,我可以通过指定-X our来使用自动冲突解决方案.手册页建议对我来说是对的:

This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result.

但是,当我这样做时git merge -s recursive -X ours master,仍然会得到相同的未解决的删除/修改冲突.我究竟做错了什么?还有另一种自动解决冲突的方法吗?

Bry*_*ead 16

可能有更好的方法来做到这一点,但我通过合并(使用默认合并策略)然后运行来解决类似的问题

git status | grep 'deleted by us' | awk '{print $4}' | xargs git rm
Run Code Online (Sandbox Code Playgroud)

在此之后,您应该正常解决其他冲突,然后提交.

这只删除了当前分支上已删除的所有文件,我认为这就是你想要的.


fnk*_*nkr 6

git merge master
git status --porcelain | awk '{if ($1=="DU") print $2}' | xargs git rm
git commit
Run Code Online (Sandbox Code Playgroud)


Ant*_*sse 3

通过查看这个问题,看起来我们他们的选项的递归策略并不将删除视为冲突。

不过,您可以做的是使用此功能为某些文件指定特定策略。我敢打赌,我们的策略(不是选项)可以解决这些文件的问题。

编辑:

正如评论中所述,你不能这样做!

如果这对您来说是一个非常重要的功能,您绝对应该联系 Git 邮件列表 ( git@vger.kernel.org )

  • 实际上它不起作用,甚至没有调用合并驱动程序,这就是为什么没有策略正确处理它 (3认同)