在 GitHub 上实施最新的拉取请求

Enforce up-to-date pull requests on GitHub

我们的团队在 GitHub 上有一个 master 分支,还有其他几个最终需要合并回 master 的功能分支。

在 GitHub 上创建合并请求之前,应该如何确保功能分支是最新的?是否有一种我们可以在主分支上实施的锁,以在创建合并请求之前强制执行最新的功能分支?

我什至不确定您是否需要这里的任何此类功能。如果一个特性分支真的与 master 分支不同步,以至于合并 PR 会导致合并冲突,那么 GitHub 将标记该拉取请求并拒绝自动完成它。

当然,作为实践,大多数开发人员会从经验中了解到 merging/rebasing 和 master 通常是一个好习惯。但是,这些东西已经由 GitHub 强制执行,至少在默认情况下是这样。

GitHub 的分支保护可以要求分支在 合并 之前保持最新,但在创建之前不能。这是有道理的。考虑:

*---*---*---*  [master]
            |\
            | *---*---*  [feature-1]
             \
              *---*  [feature-2]

此处,feature-1feature-2 相对于 master 都是最新的。如果限制要求拉取请求在创建时是最新的,我们可以为每个分支创建一个 PR。

但是当其中一个 PR 被合并时会发生什么?

*---*---*---*-----------*  [master]
            |\         /
            | *---*---*  [feature-1]
             \
              *---*  [feature-2]

现在 feature-2 不再是最新的。它的公关应该怎么办?自从它创建时是最新的以来我们什么都不做吗?我们是否使 PR 完全无效并需要创建一个新的?我们是否应该在任何给定时间只打开一个 PR?

GitHub的系统适用于合并时间。这样 PR 就可以在它们准备好合并之前创建(例如 draft PRs),并且可以安全地产生有意义的讨论而不是匆忙通过。这也意味着我们不必处理上一个问题。