git合并冲突究竟是如何发生的?

时间:2014-07-20 15:40:48

标签: git github git-branch git-merge merge-conflict-resolution

我已经创建了一个git存储库并添加了一个文本文件。这是100%用于学习目的。

  1. 我在文本文件中添加了“1”并将其提交给master。

  2. 从master创建一个新分支并附加“2”。

  3. 最后,从master创建了一个分支并附加了“3”。

  4. 请您解释一下这个或任何其他情况下可能发生的冲突?

3 个答案:

答案 0 :(得分:29)

当两个分支都修改文件的同一区域并随后合并时,会发生合并冲突。 Git无法知道要保留哪些更改,因此需要人工干预来解决冲突。

在这种情况下,您的步骤2和3会创建两个具有冲突更改的分支。

答案 1 :(得分:25)

如果合并,则会发生冲突:

  • branch2master(无冲突)
  • branch3master(冲突):

那是因为:

  • 共同的祖先是master(第二行为空)
  • 源内容为branch3(第二行包括" 3")
  • 目标内容最新为master(第二行包括" 2",从branch2合并到master

Git会要求您选择要保留的内容(" 3"," 2"或两者)。

首先,在以下后进行合并:

git config merge.conflictstyle diff3

请参阅" Fix merge conflicts in Git?"。

答案 2 :(得分:1)

我理解这是一个古老的问题,但是如果您想以直观的方式了解Git用于比较两个文件的算法,它将澄清有关重叠区域如何与diff结合使用的疑问。

这里是Eugene W. Myers开发的一种流行算法的解释。在这种方法中,将查找最短编辑脚本(SES)建模为图形搜索。 这是詹姆斯·科格兰(James Coglan)在同一篇文章上的非常好的文章-The Myers diff algorithm