我有一个包含一行的文件。 我创建了一个分支,并在同一个文件中添加了第二行。保存并提交到分支。 我切换回主人。并在文件中添加不同的第二行。保存并提交给主人。 所以现在共有3条独特的线路。
如果我现在尝试将分支合并回主服务器,则会遇到合并冲突。
为什么Git不能简单地合并每一行,一个接一个?
我的合并尝试表现如下:
PS D:\dev\testing\test1> git merge newbranch
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
PS D:\dev\testing\test1> git diff
diff --cc hello.txt
index 726eeaf,e48d31a..0000000
--- a/hello.txt
+++ b/hello.txt
@@@ -1,2 -1,2 +1,6 @@@
This is the first line.
- New line added by master.
-Added a line in newbranch.
++<<<<<<< HEAD
++New line added by master.
++=======
++Added a line in newbranch.
++>>>>>>> newbranch
有没有办法让它自动插入一行?
答案 0 :(得分:12)
假设文件分支A看起来像:
First line
Branch A's second line
分支B看起来像:
First line
Branch B's second line
合并时,有两种不同的方法可以解决它。这是一种方式:
First line
Branch A's second line
Branch B's second line
这是另一种方式:
First line
Branch B's second line
Branch A's second line
Git不知道你喜欢哪两个选项,或者哪个都是可接受的合并。
答案 1 :(得分:4)
有一个名为union
的git合并策略可以从.gitattributes
配置文件进行配置,该文件将为您执行此操作,但您无法控制冲突行最终的顺序在合并文件中,并没有冲突标记来指示发生这种情况。
您还可以定义一个自定义合并策略,该策略可以使用一些关于文件结构的专业知识来确定正确的顺序。
答案 2 :(得分:2)
让我们说你有这一行:
printf(something);
在branchA中的,你做到了:
while(x < 5)
printf(something);
分行B中的,你做到了:
if(y>10)
printf(something);
如何合并它,或者更确切地说,您是否相信工具为此创建的合并结果?
答案 3 :(得分:1)
我可以告诉你为什么它不能合并两者 - 根据git,FileA的第2行是“这样的”,而FileB的第2行是“其他东西”。因此,根据git,它试图从FileA和FileB创建File,其中一行具有两个可能的值。它无法决定你想要哪一个,所以它将它们都转储并让你解决它。