GitHub 已将堆叠式拉取请求 (stacked pull requests) 移至公开预览阶段,允许开发者将一项大型变更拆分为一系列相互依赖的 PR 链,从而实现独立评审和合并。
为什么这项功能很重要
单个庞大的 PR 往往会演变成长达一个月的评审过程,评审人员被迫费力地梳理大量无关的代码。当基础分支发生变动时,这些巨型变更极易引发合并冲突,从而导致发布停滞。堆叠式 PR 通过将一个大的 diff 转换为一系列较小的、专注的 diff(每个 diff 都建立在前一个 diff 的基础上),解决了这两个问题。
工作原理
首先针对 main 分支创建第一个 PR,然后将下一个 PR 基于第一个 PR,第三个基于第二个,依此类推。GitHub 会自动跟踪这些关系:如果你修改了基础 PR,依赖于它的 PR 也会随之更新以反映新状态。评审人员可以一键批准整个堆叠,也可以对单个层级进行签收。
- 评审范围保持在较窄的范围内,使反馈更加迅速。
- 冲突减少,因为每个 PR 只涉及其自身层级引入的代码。
- UI 会显示堆叠层级,且 GitHub CLI 提供了一行命令即可快速创建一系列堆叠式 PR。
gh pr create --title Feature A --base main
gh pr create --title Feature B --base feature-a
gh pr create --title Feature C --base feature-b
该命令行示例创建了三个关联的 PR,每个 PR 都依赖于前一个。同样的工作流也可以通过 Web 界面完成,你可以在不破坏其他 PR 的情况下,重新排序或从堆叠中丢弃某个 PR。
谁将从中受益
大型功能团队和开源维护者可以交付增量工作,而不会让评审人员面对无关的代码变动。发布经理可以更清晰地了解哪些内容已准备好发布,因为每个堆叠层级都可以按照自己的进度进行合并。
需要注意的事项
该功能仍处于预览阶段,因此在正式发布前可能会发生变化。团队需要养成关于分支管理的新习惯,并且在对已部分合并的堆叠进行 rebase 时可能会遇到边缘情况。文档仍在完善中,因此早期采用者可能需要花费额外的时间来学习 UI 提示。
后续关注点
GitHub 可能会推出与 code-owners 及自动化工具更紧密的集成,并可能展示关于冲突减少的指标。请关注预览公告页面,以获取有关 GA (general availability) 时间的更新。
核心观点: 堆叠式拉取请求为开发者提供了一种管理巨型变更的实用方法,将单个冲突密集的 PR 转变为易于管理、便于评审的序列。如果你的工作流正深受漫长评审和合并难题的困扰,那么这个预览版非常值得尝试。
