与git意外合并冲突

时间:2014-09-20 00:10:33

标签: git merge

所以我有这个简单的文件有3行:

some
random
words

首次合并测试

我在master的帖子顶部创建了两个不同的分支,文件处于原始状态。我创建了分支merge1,将第一行从some更改为will。我创建了分支merge2,它将第3行从words更改为work。我先将merge1merge2秒合并为master,所有内容都可以正常工作。

第二次合并测试

我在master的帖子顶部创建了两个不同的分支,文件处于原始状态。我创建了分支merge1,将第一行从some更改为doesnt。我创建了分支merge2,它将第2行从random更改为work。我首先合并merge1然后当我尝试合并merge2时,我收到了一个我没想到的冲突错误。

当我打开文件时,这就是我所看到的:

<<<<<<< HEAD
doesnt
random
=======
some
work
>>>>>>> merge2
words

我不明白为什么merge2将第一行显示为some,因为merge2没有更改该行。具有讽刺意味的是,SVN处理得很好。

我在这里遗漏了什么吗?为什么我可以使用同一个提交创建的2个不同的分支修改小文件的不同行,但是不能更改连续的行?

1 个答案:

答案 0 :(得分:5)

基于使用git的一些推测...

根据周围环境跟踪变化。如果你看看merge2的提交的差异,它将看起来像这样:

 some
-random
+work
 words

当您尝试将其合并到merge1修改的文件中时,它找不到锚点“some”。因此,它需要询问您如何继续。而当您修改非连续行时,它仍然可以在文件中找到一些位置来锚定它需要应用的更改。

另外,请记住,git用于跟踪代码更改。合并时往往会谨慎行事,因为最好让用户弄清楚合并,而不是以一种非显而易见的方式自动合并和破坏代码。