所以我有一个包含 3 行的简单文件:
some
random
words
第一次 merge 测试
我在 master 的这篇文章的顶部创建了两个不同的分支,文件处于原始状态。我创建分支
merge1
将第一行从 some
更改为 will
。我创建了将第 3 行从 merge2
更改为 words
的分支 work
。我首先将 merge1
和 merge2
第二个 merge 到 master 中,一切都按预期工作。第二次 merge 测试
我在 master 的这篇文章的顶部创建了两个不同的分支,文件处于原始状态。我创建分支
merge1
将第一行从 some
更改为 doesnt
。我创建了将第 2 行从 merge2
更改为 random
的分支 work
。我首先 merge merge1
并且这有效,但是当我尝试 merge merge2
时,我得到了一个我没有预料到的冲突错误。当我打开文件时,我看到的是:
<<<<<<< HEAD
doesnt
random
=======
some
work
>>>>>>> merge2
words
我不明白的是为什么 merge2 将第一行显示为
some
因为 merge2 没有更改该行。具有讽刺意味的是,SVN 处理得很好。我在这里错过了什么吗?为什么我可以有 2 个从同一个提交创建的不同分支修改小文件的不同行,但不能更改连续行?
最佳答案
一些基于使用 git 的推测......
根据周围环境跟踪变化。如果您查看 merge2 提交的差异,它将如下所示:
some
-random
+work
words
当您尝试将其 merge 到由 merge1 修改的文件中时,它找不到 anchor “some”。因此,它需要询问您如何进行。而当您修改不连续的行时,它仍然可以在文件中找到某个位置来 anchor 定它需要应用的更改。
另外,请记住,git 旨在跟踪代码更改。 merge 时,它往往会在谨慎方面出错,因为最好让用户弄清楚 merge ,而不是自动 merge 并以某种不明显的方式破坏代码。
关于git - 与 git 的意外 merge 冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25943970/