【问题标题】:Git merge showing conflicts even when there is nothing conflicting [duplicate]即使没有冲突,Git 合并也会显示冲突 [重复]
【发布时间】: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。

但是我的存储库不是这种情况,那么为什么会出现冲突。如果我对合并冲突的理解有误,请纠正我。

【问题讨论】:

标签: git merge


【解决方案1】:

发生内容冲突的规则很简单:git 看到两个分支在不同方向修改了同一段代码。可以添加/添加、添加/修改、添加/删除、修改/修改、修改/删除或删除/删除。

在您的特定情况下,您遇到了冲突,因为构成冲突部分内容的所有行都被修改了。从 A 到 D 修改后的行有 line 2。但是在另一个分支上,那条线已经消失了,所以 git 不会猜测你可能想要作为合并的结果得到什么,所以它会发生冲突。如果通过两个分支的那两条线之间存在固定分隔(例如----),则不会发生冲突。

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2011-12-16
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2016-08-21
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多