【问题标题】:GitHub "can't automatically merge"?GitHub“无法自动合并”?
【发布时间】:2015-11-05 12:58:50
【问题描述】:

有时当我尝试将头叉合并到我的基础叉中,或者我的基础叉合并到头叉中时,我在 GitHub 上收到以下消息:

“不能自动合并。别担心,你仍然可以创建拉取请求。”

我如何查看冲突(如果有的话)?

我已经阅读了大约 10 个不同的示例,其中包含各种命令,但我无法说出示例中的名称在我的情况下适用于什么,因为存在不同的基础、叉子、分支等名称。

在这一切之后,我不敢相信没有可以键入的命令来查看冲突、编辑冲突并继续合并。 如果有,我还没找到。

【问题讨论】:

    标签: git github merge


    【解决方案1】:

    做到这一点的简单方法是以这种方式使用 Github:

    • 在 Github 中选择分支选项卡,单击合并视图按钮,将您的 将前叉拖到左侧框,将基本叉拖到右侧框。
    • 点击合并分支按钮。
    • 选择更改标签。
    • 选择每个有冲突的文件。参见 '' 编辑文件 外部查看器以保留 headfork 代码并将您的代码添加到其中。
    • 点击文件上的保存
    • 点击提交按钮。
    • 点击同步。
    • 转到 Git 网站并尝试再次将您的基叉合并到头叉。

    它不应再显示原始消息

    【讨论】:

    • 自从我添加了这个,Github 已经改变了他们的界面。这个概念应该是一样的。当我再次遇到此问题时,将使用新界面的新解决方案进行更新
    【解决方案2】:

    这意味着如果上游所有者必须解决合并冲突,您的拉取请求就无法合并到上游。

    这里的解决方案是让您从上游进行提取,然后从上游解决合并冲突。此时,如果您从理论上解决上游的冲突,然后创建您的拉取请求,上游将能够自动合并您的拉取请求而不会发生任何冲突(前提是您在本地解决上游之间的上游没有提交合并冲突并合并到您的本地/分叉中,然后创建拉取请求)。

    这里以 GitHub 为例进行远程 repo 存储。

    OriginalAccount\repo1 - 说这是原始存储库(我们将其称为“上游”)

    YourAccount\repo1 - 这将是您的存储库的分支(这通常是“源”远程)

    repo1 local - 这是存储库的本地副本。

    当您创建从 YourAccount\repo1OriginalAccount\repo1 的拉取请求时(实际上是从 originupstream),看到无法自动合并的消息意味着 OriginalAccount\repo1YourAccount\repo1 没有的提交(很可能在之后推送的提交你分叉了)。

    这里的解决方案是从 upstream 获取到您的本地存储库(从 OriginalAccount\repo1 到您的本地存储库)并在本地解决任何合并冲突。然后将您的提交推送到 YourAccount\repo1。此时,您应该能够创建您的拉取请求,该请求应该能够自动合并到 OriginalAccount\repo1

    注意:尽管大多数 Git 服务不会阻止您继续执行要求上游贡献者解决合并冲突的拉取请求,但确保您的拉取请求与没有冲突。这样想,你应该做合并冲突解决工作,而不是让上游贡献者从你的贡献中做这项工作。

    【讨论】:

    • 我什至不知道这是什么意思“解决上游的冲突,然后创建你的拉取请求”
    • @user2568374 我刚刚在一个说明性示例中进行了编辑。希望这能消除任何困惑。
    • 迷路了。这可以用 Github 完成吗?我尝试将头叉拖到左合并方,将我的分支拖到右合并方并单击合并分支并同步,但这仍然不能解决问题。
    • 不起作用,我明白了概念但不知道如何完成此操作
    • @ThomasStringer:有一些示例命令和/或屏幕截图来说明您的示例会很有用。很高兴看到“从上游获取”和“在本地解决任何合并冲突”是什么样子的。
    【解决方案3】:

    假设有 your-branch 和 master 分支。您想将您的分支中的更改合并到主分支中以供其他人查看,但同时其他人对主分支进行了冲突更改(例如合并他们的 PR)。在创建 PR 之前,将 master 合并到您的分支(即反向合并)通常很有用。

    在命令行中,您可以:

    git checkout master
    git pull
    git checkout your-branch
    git merge master
    

    现在您可以看到冲突列表。按照从 git 获得的消息来解决冲突。您可以使用自己喜欢的工具,因此更容易。最后,你提交并推送。重新创建 PR 时,应该没有冲突。

    【讨论】:

    • 坚持使用这些相同的示例分支,您可以通过检查您的分支来缩短所需的命令数量,然后执行:git pull origin master
    • 谢谢你救了我的心
    • 非常感谢,我采取了一条不太理想的方法来解决同样的问题,但感谢您的回答,这绝对是最好的方法。希望我可以在 SO 上为有用的答案添加书签
    【解决方案4】:

    当您的代码合并到存储库中时,您会遇到冲突,这将与已经存在的代码发生冲突。 如果您的拉取请求被接受,则由回购经理来解决它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2012-04-23
      相关资源
      最近更新 更多