【发布时间】:2014-09-11 04:36:39
【问题描述】:
我已经创建了一个 git 存储库并向其中添加了一个文本文件。这是100%用于学习目的。
我在文本文件中添加了“1”并将其提交给 master。
从 master 创建了一个新分支并附加了“2”。
最后,从 master 创建了一个分支并附加了“3”。
您能否解释一下在这种情况或任何其他情况下如何发生冲突?
【问题讨论】:
我已经创建了一个 git 存储库并向其中添加了一个文本文件。这是100%用于学习目的。
我在文本文件中添加了“1”并将其提交给 master。
从 master 创建了一个新分支并附加了“2”。
最后,从 master 创建了一个分支并附加了“3”。
您能否解释一下在这种情况或任何其他情况下如何发生冲突?
【问题讨论】:
合并会有冲突:
branch2 到 master(无冲突)branch3 到 master(冲突):那是因为:
master(第二行为空)branch3(第二行包含“3”)master(第二行包含“2”,从branch2到master的合并)Git 会要求您选择要保留的内容(“3”、“2”或两者都保留)。
首先,在之后进行合并:
git config merge.conflictstyle diff3
【讨论】:
当两个分支都修改文件的同一区域并随后合并时,就会发生合并冲突。 Git 不知道要保留哪些更改,因此需要人工干预来解决冲突。
在这种情况下,您的第 2 步和第 3 步会创建两个具有冲突更改的分支。
【讨论】:
我知道这是一个老问题,但如果您想以直观的方式了解 Git 用于比较两个文件的算法。它将澄清关于重叠区域如何与差异一起工作的疑问。
这里解释了 Eugene W. Myers 开发的一种流行算法。在这种方法中,寻找最短编辑脚本 (SES) 被建模为图形搜索。 这是 James Coglan 撰写的非常好的文章,并附有示例 - The Myers diff algorithm
【讨论】: