GitHub 原生支持 Stacked PRs 了

原文:GitHub Stacked PRs

大 PR 的问题

大型 Pull Request 有三个顽固的问题:

  • 难以审查:代码量太大,审查者很难在脑子里建立完整的上下文
  • 合并慢:改动越大,讨论越多,等待时间越长
  • 容易冲突:长时间存在的 PR 会不断和主分支产生 diff,解冲突耗时耗力

解决方法大家都知道——拆小。但拆小之后,多个 PR 之间的依赖关系怎么管?这是真正的难点。

Stacked PRs 是什么

GitHub 推出的 Stacked PRs 让你把一组相互依赖的 PR 排成一个有序的「栈」:

main
 └── PR #1: 基础数据层
      └── PR #2: API 路由
           └── PR #3: 前端界面

每个 PR 只针对它下面那个 PR 的分支,而不是直接对 main。这样每一个 PR 的 diff 都很干净,审查者只需要看当前这层的改动。

当下层 PR 合并之后,上层 PR 自动 rebase 到新的目标分支,整个栈保持连贯。

gh stack CLI

配合命令行工具使用:

# 安装
gh extension install github/gh-stack

# 初始化一个栈
gs init auth-layer

# 新增一层
gs add api-routes

# 推送并创建所有 PR
gs push
gs submit

一个命令就能处理整个栈的 rebase 和推送,不需要手动一个个操作。

AI 编程工作流集成

Stacked PRs 也支持和 AI 编程工具集成:

npx skills add github/gh-stack

这对 AI 生成大块代码的场景很有用——让 AI 帮你把代码拆成合理的层次,每层单独提 PR。

现状

目前功能处于 私有预览阶段,需要申请加入候补名单。感兴趣的可以去官网登记。


个人感受:这个方向是对的。现在 AI 辅助编程让单次提交的代码量大幅增加,如何把 AI 生成的大块代码审查得有条理,是一个实际存在的工程问题。Stacked PRs 提供了一个结构化的答案。