为什么Git不能与修改后的父/主合并合并文件?

时间:2010-04-06 22:36:31

标签: git

我有一个包含一行的文件。 我创建了一个分支,并在同一个文件中添加了第二行。保存并提交到分支。 我切换回主人。并在文件中添加不同的第二行。保存并提交给主人。 所以现在共有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

有没有办法让它自动插入一行?

4 个答案:

答案 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,其中一行具有两个可能的值。它无法决定你想要哪一个,所以它将它们都转储并让你解决它。