GitHub 最近在私有预览中推出 Stacked PRs,这个功能借鉴了早期 Phabricator 的“堆叠 diff”思路,目标是让大型 Pull Request 更容易拆分、审查和合并。开发者可以把多个 PR 像“栈”一样串起来,每个 PR 都基于前一个 PR 之上。

在这种模式下,每个 PR 都可以独立评审与合并,但必须按照顺序从底层往上推进。如果底层还没合并,上层就无法进入主分支。GitHub 认为这能推动开发者写出更小、更清晰的改动单元,从而降低审查负担。

传统开发流程里,开发者往往为了避免等待审查,会把多个改动累积在一个分支中,最终形成一个“巨大 PR”,涉及多个文件和逻辑模块,review 难度很高。而类似的堆叠工作流其实早在 Facebook 内部工具 Differential 和 Phabricator 中就已经成熟使用。Phabricator 虽然在 2021 年停止维护,但相关理念仍在社区延续,例如分支项目 Phorge。

GitHub 的 Stacked PRs 改变了这种工作方式:最底层 PR 通常直接基于 main 分支,其后的 PR 逐层依赖。这意味着开发者可以在一个功能还未完全合并时,继续在其基础上推进下一步开发,而不用等待整个 feature 完成。

为了降低使用门槛,GitHub 还提供了 CLI 工具 gh stack,但官方强调可以完全通过网页 UI 操作。不过在工程实践中,CLI 对批量管理 stack 更方便。此外,GitHub 也在考虑 AI 编程代理的使用场景,认为“现在的瓶颈不再是写代码,而是代码审查”,而 stacked PRs 正好能缓解这一问题。