【发布时间】:2020-04-14 10:53:37
【问题描述】:
出于这个原因,我一直在尝试在不同条件下的测试存储库中执行一些变基和合并。
这是我对合并冲突的理解,它们基本上是在功能分支的 更改 与 master 的更改与它们分开的提交不同时出现的。
这是我正在测试的存储库的分支结构。
C (feature)
/
B
/
A-----D (master)
每个版本的内容只是一个名为file的文件
答:
line 1
line 2
line 3
line 4
D:
changed line 1
line 2
line 3
line 4
乙:
line 1
changed line 2
line 3
line 4
C:
line 1
changed line 2
changed line 3
line 4
现在当我执行git merge master feature 时,我看到与我的文件的以下内容存在合并冲突,
<<<<<<< HEAD
line 1
changed line 2
changed line 3
||||||| 00f97ec
line 1
line 2
line 3
=======
changed line 1
line 2
line 3
>>>>>>> master
line 4
这是我对 git 如何合并文件的理解:
- 它将比较 3 个提交,即 A、D 和 C。
- 它会检查 C 或 D 是否添加或删除了任何行,以及 A 是否有。
- 假设 C 添加了一个既不在 A 中也不是由 D 添加的行,那么它将在最终提交中。
- 唯一必须发生冲突的情况是,当一个分支添加或删除一行并且另一个分支对同一行进行修改并且同一行也应该出现在它们的最后一个公共中祖先即A。
但是我的存储库不是这种情况,那么为什么会出现冲突。如果我对合并冲突的理解有误,请纠正我。
【问题讨论】:
-
把它看成一台电脑。只有第 4 行是稳定的。其他一切都以两种不同的方式发生变化。这是一个冲突。 Git 不知道你想要什么,所以它会问你。
-
非常感谢@matt,这是一个错误的事情,我为 git 源代码本身编写的测试用例挠了 2 天(多么讽刺)解决一个新手错误。这里的所有链接都很有帮助!