我想知道你们中的某些人是否遇到过这个问题。
我的主分支中有一个txt文件。我加了四行
Line1
Line2
Line3
Line4
然后我从主节点创建了2个分支。 Feature1和Feature2。
在feature1中,我将第一行从 Line1 更改为 Line1changed 。
在feature2中,我将第二行从 Line2 更改为 Line2changed 。
我将feature1合并到主分支中没有任何问题,然后当我尝试将feature2合并到主分支时,检测到冲突。
$ git merge feature2
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.
我想知道为什么。
$ git diff
diff --cc file.txt
index cd3d4bb,bb25698..0000000
--- a/file.txt
+++ b/file.txt
@@@ -1,4 -1,4 +1,9 @@@
++<<<<<<< HEAD
+Line1changed
+Line2
++=======
+ Line1
+ Line2changed
++>>>>>>> feature2
Line3
Line4
答案 0 :(得分:2)
如果更改不重叠,则默认合并配置将自动合并。但是,“重叠”是以包含相邻行的方式定义的。因此,例如,当您更改第1行时,它将与第1行或第2行(以及第1行之前或之后的插入)重叠。
答案 1 :(得分:0)
我不是Git合并算法的专家,但是我似乎想起了对于相邻线的更改有一个接近阈值,这会引发冲突。回顾一下,首先您在main
分支中添加了四行:
Line1
Line2
Line3
Line4
然后,您分支到feature1
和feature2
,编辑feature1
中的第一行:
Line1changed
Line2
Line3
Line4
当您将此内容重新合并到main
分支中时,没有冲突,因为仅更改了第一行。但是,当您将feature2
合并到main
中时,第一行和第二行都有不同的版本,即
Line1changed (feature1) Line1 (feature1)
Line2 (feature1) Line2changed (feature2)
这引发了合并冲突,因为这两行彼此直接相邻。我认为在相隔一定数量的行内进行类似的更改也会发生这种情况。
但是最重要的是,合并冲突是软件开发,Git以及其他任何VCS工具中都存在的事实。