我创建了一个git仓库,并添加了一个文本文件。这完全是为了学习目的。
我向文本文件中添加了 "1" 并提交到主分支。
从主分支创建了一个新分支并添加了 "2"。
最后,从主分支创建了一个分支并添加了 "3"。
请问您能否解释一下在此或其他情况下如何发生冲突?
如果您将以下分支合并:
branch2
到 master
(无冲突)branch3
到 master
(有冲突):这是因为:
master
(第二行为空白)branch3
(第二行包括“3”)master
(第二行包括“2”,来自于将 branch2
合并到 master
)Git 会要求您选择保留哪个内容(“3”、“2” 或两者兼有)。
首先,完成以下合并:
git config merge.conflictstyle diff3
查看 "在Git中解决合并冲突?"。
注释:
With Git 2.30 (Q1 2021), a new default merge strategy is in place: ORT ("Ostensibly Recursive's Twin"), with clearer conflict messages (Gti 2.36, Q2 2022)
you can preview those conflicts with (Git 2.38, Q3 2022):
git merge-tree --write-tree --no-messages branch1 branch2
(That would not touch the index or working tree!)
当两个分支对同一个文件的区域进行修改并随后合并时,就会发生合并冲突。Git无法知道保留哪种更改,因此需要人工干预来解决冲突。
在这种情况下,您的第2步和第3步创建了两个具有冲突更改的分支。
我知道这是一个旧问题,但是如果您想以一种直观的方式了解Git用于比较两个文件的算法,以下内容会澄清关于重叠区域如何使用差异(diff)的疑惑。
这里是Eugene W. Myers开发的一种流行算法的解释。在这种方法中,查找最短编辑脚本(SES)被建模为图搜索。以下是一个非常好的文章,由James Coglan提供相同的例子 -The Myers diff algorithm