我有一个特殊的分支(release 分支),它是 master 分支的精确副本,删除了一些文件和目录。此分支上没有任何开发,但它必须与 master 同步,因此必须不断将 master 上的更新推送到该分支。
通过正常 merge (git merge master
),我经常遇到冲突,例如(示例 README 文件):
CONFLICT(删除/修改):README 在 HEAD 中删除,在 master 中修改
这是预期的:我尝试 merge 我已删除的文件中的更改。因此,为了解决这些问题,我只使用 git rm README
。
要使其自动化,我可以通过指定 -X ours 来使用自动冲突解决。手册页表明这对我来说是正确的:
此选项通过支持我们的版本强制自动解决冲突的 hunk。来自另一棵树的与我们这边不冲突的变化被反射(reflect)到
merge 结果。
但是,当我执行 git merge -s recursive -X ours master
时,我仍然遇到相同的 Unresolved 删除/修改冲突。我究竟做错了什么?有没有其他方法可以自动解决冲突?
最佳答案
可能有更好的方法来做到这一点,但我通过执行 merge (使用默认 merge 策略)然后运行解决了类似的问题
git status | grep 'deleted by us' | awk '{print $4}' | xargs git rm
在此之后,您应该正常解决其他冲突,然后提交。
这只是删除了当前分支上已删除的所有文件,我认为这就是您想要的。
关于Git merge 策略忽略删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331494/