所以我有一个包含 3 行的简单文件:

some
random
words

第一次 merge 测试

我在 master 的这篇文章的顶部创建了两个不同的分支,文件处于原始状态。我创建分支 merge1 将第一行从 some 更改为 will 。我创建了将第 3 行从 merge2 更改为 words 的分支 work 。我首先将 merge1merge2 第二个 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/

10-13 08:59