Github 解决冲突总是将基础分支合并到我当前的分支

Dar*_*ony 10 merge github merge-conflict-resolution

我在 PHP Storm 的本地分支机构工作。任务完成后,我提交我的分支并推送到 git。

在 Github 页面上,我创建了一个 Pull 请求 DEV <- 我的分支。Dev 是基础分支,我将把我的分支合并到其中。

到目前为止这还可以。但如果某些文件存在冲突 - 根据本文https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/resolving- github 上的合并冲突

就我而言,相同的文件已在其他分支中更新并之前合并到 DEV 中。现在在我的分支中有相同的文件和其他更改。

当我解决冲突(甚至可以是一行)时,我将其标记为已解决并提交合并。

现在,整个 DEV 基础分支被合并到我自己的分支中,这不太好。

因为我正在将我的分支合并到 DEV,而不是相反。如何才能避免这种情况呢?

我尝试重新创建相同的分支,但是一旦开发合并到这里,它就始终存在。每次冲突都会发生这种情况,这是无稽之谈 - 正如上述网络的第 8 点所说:

解决所有合并冲突后,单击提交合并。这会将整个基础分支合并到您的头分支中。

在此输入图像描述

Sch*_*ern 3

太长了;博士

整个DEV基础分支合并到我自己的分支

这是Github冲突解决流程的一个特点。

来自解决 Github 上的合并冲突:“ 8. 一旦解决了所有合并冲突,请单击提交合并。这会将整个基础分支合并到您的头分支中。 ”但他们没有解释原因。

这不好

这很令人惊讶,但也很好。下面我会解释一下。

如何才能避免这种情况呢?

不要回避它。但可以让这个过程更加顺利。

让您的分支与开发人员保持同步并解决任何冲突。然后提交 PR。

要在 Github 上执行此操作:以草稿形式提交您的 PR;解决Github上的冲突;将其标记为可供审核。通过从草稿开始,您可以避免人们在冲突解决完成之前审查您的代码。

要在命令行上执行此操作:

# Bring dev up to date
$ git checkout dev
$ git pull

# Update your branch with the latest dev
$ git checkout <your branch>
$ git rebase dev       # or git merge dev
Run Code Online (Sandbox Code Playgroud)

请注意,是的,您在提交要合并到 dev 的分支之前将 dev 合并到您的分支中。这是使分支更新的正常过程。

您应该习惯性地更新您的分支,以减少分支和开发人员之间的偏差。这将使冲突解决方案更小且更易于管理。


你这样做吗,Github?

与任何审核流程一样,Github PR 流程的目的是检查合并结果是否有效。这可能涉及自动检查、运行分支测试和手动审核。

让我们考虑一下它是否如您所愿。您的 PR 通过了所有检查。你点击合并按钮,就会出现冲突。您解决冲突并直接合并到开发中。

如果您在解决冲突时犯了错误怎么办?

已解析的代码不是已审核的代码。合并冲突表明开发中发生了您不知道且没有考虑到的更改。您刚刚编辑了分支来修复该问题,并且该工作尚未经过检查。如果立即合并到开发中,就没有什么可以阻止你的 PR 破坏每个人的开发。

相反,Github PR 需要像任何其他编辑一样对待手动冲突解决。与任何其他编辑一样,必须重新检查。已解析的代码必须位于存储库中的某个位置。因此,Github 将 dev 与冲突解决方案一起合并到您的分支中,就像您在提交 PR 之前更新了分支一样。现在可以重新检查您的分支是否有错误。解析后的代码通过了检查,可以安全地合并。

所以 Github 正在做你应该在命令行上做的同样的事情。从开发更新您的分支,解决所有冲突,检查结果,然后合并。

注意:这是我的一个有根据的猜测。我对Github没有什么特别的见解。


最后,功能分支是短暂的。一旦合并,它们就应该被删除。只要结果正确,具体的合并过程并不太重要。

  • @Schwern 这让我很困扰。我今天正在合并 Main -&gt; Feature,将最新的内容引入功能分支,我在 Github 上做了一个 PR,而不是在本地做。如果我解决了单行冲突,当我看到它想要“提交到 main”时,我应该停在那里,但我继续了。最终结果是,当我的 PR 的目的是将 main 合并到功能时,我的整个功能分支被合并到 main 中。令人不安的部分是我的主分支有分支保护,必须是 PR,必须有审批者/CodeOwner 审查,但不知何故可以通过修复冲突来绕过所有这些?怎么可能? (3认同)
  • 非常感谢你的解释。问题是,如果我们正在执行 Release,并从 master 创建 Release 分支。对于这个分支,我们正在合并所有准备发布的远程分支。但是,如果整个开发已合并到我的分支,则意味着它还包含用户的其他提交和开发上的更改,其中一些可能尚未准备好发布。但如果我只想发布我的分支,它已经包含了开发中的所有更改,并且所有内容都将发布到生产中,这是非常糟糕的。我们只需要发布选定的分支,这就是为什么将整个开发合并到分支是不好的 (2认同)