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

时间:2012-07-04 14:58:05

标签: git merge

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

通过正常合并(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时,我仍然得到相同的未解决的删除/修改冲突。我究竟做错了什么?还有另一种自动解决冲突的方法吗?

4 个答案:

答案 0 :(得分:16)

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

解决了类似的问题
git status | grep 'deleted by us' | awk '{print $4}' | xargs git rm

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

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

答案 1 :(得分:5)

@testWith

答案 2 :(得分:3)

通过查看this question,看起来递归策略我们的他们的选项不考虑删除为冲突。

您可以做的是使用this feature为某些文件指定特定策略。我敢打赌,我们的策略(非选项)会为这些文件提供技巧。

修改

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

如果这是一个非常重要的功能,你应该明确联系Git邮件列表( git@vger.kernel.org

答案 3 :(得分:-1)

您可以使用rebase而不是merge来实现发布分支。