【问题标题】:Github pull request not showing all merge conflictsGithub 拉取请求未显示所有合并冲突
【发布时间】:2020-12-28 11:20:25
【问题描述】:

提前感谢您的回答。我使用基本的 Github 工作流程来工作,但这种情况让我很困惑。

以下是事件的背景和顺序:

  • master 分支中有 2 个文件:file1file2
  • dev1master 创建的分支
  • 其他人在另一个分支上工作,dev2,它也是基于master
  • dev2 被合并到 master 中,对 file1file2 都进行了更改
  • 在对 file1file2 进行了一堆提交之后,我为 dev1 创建了一个拉取请求,但它们都没有包含来自 dev2 分支的任何内容
  • 我预计与master 会发生很多合并冲突,因为master 现在有dev2 更改而我的dev1 分支没有,但Github 仅显示file1 的合并冲突, none 表示 file2
  • 我手动比较了dev1/file2master/file2,确实有很多不同,恐怕合并会覆盖master/file2
  • 现在我什至不相信 file1 的合并冲突报告。

那我做错了什么?如何查看 master 分支与 dev1 分支的 file1 和 file2 之间的所有差异?我主要担心的是我想将 master 分支中的所有新更改合并到我的 dev1 分支中,然后不应该有任何合并冲突。

【问题讨论】:

  • 这里似乎存在很大的误解。完全可以在一个分支中编辑文件并在另一个分支中编辑“相同”文件并且零冲突。那不是冲突。在一个 2000 行的文件中,每一方编辑 100 行不同的行并且仍然没有冲突是可能的。或者一个。或者100。这完全取决于细节,嗯。但关键是,我认为您没有正确设想合并是什么或冲突是什么。 100 个差异很容易意味着零冲突。

标签: git github merge


【解决方案1】:

添加到马特的评论中,

只有当 Git 不知道从 2 个冲突的更改中选择哪个更改时,Git 才会遇到合并冲突。

举个例子,我们只考虑 1 个文件,名为 file1,版本为 v0,位于 master 分支上。假设您的同行对file1 版本v0 的第1-10 行进行了更改并将其合并。该文件现在在 master 上的版本为 v1。但是您仍在使用版本v0。现在有两种可能的情况:

  1. 您对第 30-50 行(或除第 1-10 行以外的任何其他行)进行了更改。在这种情况下,git 会自动将您的代码与版本 v1 合并,以创建包含您和您的同行更改的版本 v2。它使用术语auto-merging 来表示这一点。

  1. 您对 1-10 之间的任何行进行了冲突更改。如果您进行与同行完全相同的更改,即使那样 git 也不会显示合并冲突。但是,如果您确实进行了相互冲突的更改,git 需要询问您这 2 项更改中的哪一项是正确的或更偏好的一项,因为它无法自行决定。这就是在这种情况下显示合并冲突的原因。

希望这可以帮助您更好地理解合并冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2019-11-01
    • 2016-10-28
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多