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 中反饋使用體驗。

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

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

小夜