从 release 到 main 的 PR 有冲突

PR from release to main has conflicts

最近我们转向了“Git 流”方法,我们使用了 developreleasemain 分支。最近我们从与最近的 release 分支相同的提交创建了一个 main 分支。每次我们将 release 分支合并到 main 中,然后我们将 main 合并到 develop 中,通常会在 main 的新分支中首先解决冲突(因为它们是受保护的分支)。

但是,随着从 develop 创建的最新 release 分支,我们在 release(此时只是 develop)和 main。解决这些冲突只是一个 0 文件更改 PR,但我不明白为什么一开始还会有冲突。我画了最近的历史来尝试进一步证明这个过程:

Git process

请注意,所有这些合并都被压缩了

任何帮助将不胜感激!!

如果您使用的是标准 Git Flow,那么在将 release 合并到 main/[=12= 时,您应该 永远不会 发生合并冲突].如果你确实有冲突,那就有问题了。冲突不应该存在的原因是因为提交出现在 main 上的唯一两种方式是来自 release 分支,或者 hotfix。在 hotfix 合并到 main 的情况下,如果存在发布分支,您应该立即将 main 合并回 release,如果不存在,您应该将 main 合并回 develop。这样 release 将永远领先于 main.

使用标准 Git Flow,唯一可能发生冲突的时间是合并时:

  • main 回到 release(修补程序与版本冲突)
  • main 回到 develop(release/hotfix 与 develop 冲突)
  • release 回到 develop(发布与开发冲突)

如果您在将 release 合并到 main 时遇到冲突,最可能的原因是您在 main 上有一个修补程序没有合并回 release ] 紧随其后,跳过此步骤有潜在的危险,因为如果您将发布分支直接部署到生产环境中,您将不会在其中进行这些修补程序更改。

关于图表中的这段文字:

At some point, trying to merge develop into main results in merge conflicts.

我假设你的意思是“将 main 合并到 develop”,而不是反过来,因为实际上并没有 develop 直接流入 main.将 main 向下合并到 develop 时发生冲突是完全正常的,这通常发生在 developrelease 分支分支后修改相同文件时。这只是正常的开发过程,除非您愿意实施代码冻结。

进程问题:

Note that all of those merges are squashed

这似乎不对。这绝对不是 Git Flow 的一部分,并且通常您永远不想重写 long-lived/protected 分支上的提交。这意味着 developreleasehotfixmain/master 上的提交不应被压缩。唯一一次 可能 将压缩与 Git Flow 一起使用是在将功能分支合并到 developrelease 时,如果你不这样做的话不关心特性分支上的具体提交信息。

关于此声明的附注:

Every time we merge a release branch into main, we then merge main into develop, usually with a new branch off of main where we resolve conflicts first (since they're protected branches).

这是一个小问题,但是在将 release 合并到 main 之后将 main 合并回 develop 真是太棒了。标准 Git Flow 建议实际将 release 合并到 develop 而不是从 main 那里合并,但是,从代码的角度来看,这并没有什么不同,并且按照您的方式进行操作是恕我直言,在较长 运行 中更清洁且效率更高。这是我一直推荐给 Standard Git Flow 的少数调整之一。