当我将我的发布分支合并到 main,然后合并到 dev 以合并那里的更改时,我的开发人员说它是 X 提交在前,X 提交在后。为什么?

When I merge my release branch into main, and then into dev to incorporate the changes there, my dev says it's X commits ahead, X commits behind. Why?

我正在关注 git 流程分支 model。我非常严格地遵循指南。

但是,我的开发分支现在是这样说的:

This branch is 1 commit ahead, 1 commit behind main.

我对此感到困惑。似乎每个分支上的新合并提交(由将 release 合并到 dev 和 main 引起)是唯一的区别。这应该发生吗?我做错了什么吗?

这完全没问题,在某些情况下也是意料之中的。让我们来看看发生了什么:

  1. 您从 develop 的顶端创建了分支 release。此时 developrelease 相同。
  2. 您向 release 添加了一些带有错误修复的提交(或者没有,就此问题而言,它实际上并没有改变结果)。
  3. 一旦您对 release 感到满意,您就可以部署它并使用 --no-ff(没有 fast-forward)标志将其合并到 main 中。这会在 main 上创建一个新的合并提交。所以此时 releasemain 具有相同的内容,但是 main 有一个额外的提交。
  4. 现在您还使用 --no-ffrelease 合并回 develop。这会在 develop 上创建一个不在 releasemain.
  5. 上的新提交
  6. 现在你删除 release.

所以在这一点上,develop 至少有 1 个不在 main 上的提交,并且 main恰好 一项不在 develop 中的提交。据推测,自从创建 release 分支以来,您没有向 develop 添加任何提交,因此 develop 正好比 main 早 1 次提交,正好比 main 晚 1 次提交 main.

注意: 下次您执行 release 分支时将发生相同的过程,但您最终会在 main 上进行 2 次提交不在 develop 中,这将继续递增,直到您执行第一个 hotfix 分支,这将一次性将所有那些较旧的合并提交带回 develop。这是预料之中的,但您第一次看到它时可能会感到困惑。

提示: 在经历了 hotfix 分支将许多合并提交带回 develop 之后,现在当我在使用 [=86= 的 repos 中工作时] Flow,在将release合并成main之后,我更愿意将main合并成develop,而不是将release合并成develop。内容将相同,但现在 develop 不再落后于 main。这还有一个额外的好处,那就是在部署之前更容易确定 release 分支是否与 main 完全同步;您只需要确保 master 指向的提交也在 release.