我有一个特殊的分支(发布分支),它是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
时,我仍然得到相同的未解决的删除/修改冲突。我究竟做错了什么?还有另一种自动解决冲突的方法吗?
答案 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来实现发布分支。