GitHub 堆叠 PR 公测:大改动拆成可独立审查的小层,一键合并整栈

前言

大型功能改动往往意味着一个体积庞大的 Pull Request:审查者需要面对上千行 diff,CI 跑很久,反馈周期被拉长,合并冲突也更容易堆积。不少团队会手动把改动拆成多个有依赖关系的分支和 PR,但 rebase、对齐 base 分支、确认每层 CI 状态,这些维护成本并不低。

2026 年 7 月 30 日,GitHub 宣布 Stacked Pull Requests(堆叠 PR) 进入公测(Public Preview)。该功能把大型变更拆成有序、可独立审查的 PR 链,并在 Web、CLI、移动端及 Copilot Agent 中统一管理;审查者可以并行 review 不同层,合并时也能一键落地整栈。本文基于 GitHub 官方 Changelog 与文档,梳理这一功能的核心机制与上手方式。

说明:堆叠 PR 目前处于公测阶段,功能与 API 可能调整;Merge Queue 对堆叠 PR 的支持将在未来数周内逐步推出。

什么是堆叠 PR

堆叠 PR 是指同一仓库内两个及以上 Pull Request 形成的依赖链:

  • 最底层(bottom)的 PR 以主干分支(通常是 main)为 base;
  • 其上每一层 PR 的 base 都是下一层 PR 所在的分支。

示意结构如下:

   ┌── feat/frontend      → PR #3(base: feat/api-endpoints)  ← 顶层
  ┌── feat/api-endpoints  → PR #2(base: feat/auth-layer)
 ┌── feat/auth-layer      → PR #1(base: main)               ← 底层
main(默认主干)

每层 PR 只展示「当前分支相对下一层分支」的 diff,而不是整坨改动的累积差异。共享类型、数据库 schema 等基础改动放在较低层;依赖它们的 API、UI 逻辑放在更高层。官方文档强调一条原则:若 A 层代码依赖 B 层,则 B 必须在同一层或更低层

为什么社区讨论热度高

堆叠 PR 并非全新概念——Graphite、ghstack 等工具早已在 GitHub 生态里实践类似工作流。此次 GitHub 原生支持后,几个痛点被直接解决:

  1. 分支维护:依赖链上的 rebase 由 GitHub 服务端或 gh stack CLI 自动级联处理,合并底层 PR 后,上层分支会自动 rebase 并 retarget。
  2. 规则与 CI:过去链式 PR 往往只有最底层能完整触发 branch protection 和 CI;现在 stack 中每一层都会执行与 base 分支(通常是 main)相同的保护规则和 PR 触发的 Actions 检查。
  3. 审查上下文:Web 端 PR 顶部会显示 stack 图标与 stack map,审查者能清楚看到当前层在整个改动中的位置。

在 AI 辅助编码普及的背景下,这一功能也被官方明确对标「高产出开发」场景:Agent 完成一个任务后立刻在上一层继续下一个任务,每层对应一个 PR,避免把不相关改动揉进同一分支。

Next.js 负责人 Tim Neutkens、jQuery 作者 John Resig 等在 GitHub 公告中均提到,堆叠 PR 帮助团队在保持小步审查的同时推进大功能;John Resig 还特别提到配合 gh CLI 与 Agent skill 可以一次性将多层 PR 送入 Merge Queue。

在哪里能用

根据官方文档,堆叠 PR 目前支持:

入口 说明
GitHub 网站 stack map、层级导航、一键合并整栈
GitHub CLI gh stack 扩展,负责本地创建、rebase、提交
GitHub Mobile 移动端查看与操作 stack
Webhooks / REST / GraphQL 自动化集成,payload 含 stack 对象
Copilot 等 Agent 通过 gh-stack skill 驱动 CLI

暂不支持:GitHub Desktop;跨 fork 的 stack(所有分支须在同一仓库)。

快速上手:gh stack CLI

环境要求

  • GitHub CLI(gh2.90.0 或更高,Git 2.20 或更高
  • 已执行 gh auth login 完成认证
  • 对目标仓库具备 push 权限

安装扩展

gh extension install github/gh-stack

若要在 Copilot 等 AI Agent 中使用,可额外安装 skill:

gh skill install github/gh-stack

创建第一个 stack

  1. 在仓库目录初始化 stack,CLI 会创建跟踪记录并生成第一个分支:
gh stack init
  1. 在当前层正常写代码、提交:
git add .
git commit -m "添加 auth 中间件"
  1. 开始下一个逻辑单元时,在 stack 顶部新增分支:
gh stack add feat/api-routes
# 继续开发并 commit ...
  1. 推送所有分支:
gh stack push
  1. 创建 PR 并在 GitHub 上链接为 stack:
gh stack submit

第一条 PR 的 base 是 main,后续每层 PR 的 base 为下一层分支。审查者每层只看到自己负责的那部分 diff。

  1. 随时查看 stack 全貌:
gh stack view

常用命令速查

命令 作用
gh stack add -Am "MESSAGE" 暂存、提交,并在需要时创建新层
gh stack sync 拉取远端、rebase、推送并同步 PR 状态
gh stack rebase 对 stack 执行级联 rebase
gh stack merge 合并一层或多层 stack PR
gh stack checkout <PR号> 按 PR 号切换 stack 中的分支
gh stack unstack 解除 stack 关联

Web 端审查与合并

打开 stack 中的任意 PR,页面顶部会显示层级编号与 stack map,可一键跳转到其他层。不同审查者可以并行 review 不同层,互不阻塞。

合并规则要点:

  • 必须从底层向上合并;
  • 合并顶层 PR 时,其下所有未合并层会一并落地;
  • 若只合并中间某层,该层及以下合并,上层 PR 保持打开并自动 retarget;
  • 支持 merge commit、squash、rebase 三种合并方式,且与 Merge Queue 兼容(支持正在逐步 rollout)。

与 Merge Queue、Copilot 的关系

Merge Queue 用于在合并前排队跑 CI、避免主干冲突;官方表示 stack 的 Merge Queue 支持正在分阶段推出。John Resig 在公告中的用例是「一次性将 5 个堆叠 PR 送入 merge queue」,说明目标场景是:多层改动各自通过审查与检查后,作为整体有序进入主干。

Copilot 侧则通过 gh-stack skill 让 Agent 理解 stack 语义——创建分支链、push、submit、rebase 等操作都可以被 Agent 调用,适合 AI 连续产出多步改动的场景。GitHub 文档也提供了「Stack AI-generated code in pull requests」教程,指导如何把 Agent 产出组织成 stack。

使用时的注意点

  1. 公测阶段:API 有更新,若通过 REST API 合并 stack,需使用支持 stack 的新版 merge API(文档标注 API 版本 2026-03-10)。
  2. 仓库范围:不支持 fork 仓库之间的 stack。
  3. 拆分粒度:每层应是可独立审查的逻辑单元;切换前后端、核心逻辑与测试等「不同关注点」时适合开新层。
  4. ** rollout 节奏**:功能在未来数天内向所有仓库开放;Merge Queue 集成需等待后续更新。

小结

GitHub 堆叠 PR 把「大 PR 难审、链式分支难维护」这一老问题收进了原生工作流:小层并行审查、规则与 CI 逐层生效、合并时一键落地整栈,rebase 由平台托管。对习惯 Graphite 等第三方工具的团队,这是一次「不用换平台也能 stack」的选项;对正在用 Copilot 加速产出的团队,则提供了一条把 Agent 产出结构化入库的路径。

若你所在团队正被巨型 PR 拖慢节奏,可以先 gh extension install github/gh-stack,用一个小功能试水 stack 拆分,再在 Web 端体验 stack map 与整栈合并。公测期间欢迎在 GitHub 的 stacks discussion 中反馈使用体验。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜