工具大全
开发者工具作者:Coocon2026年9月4日4 次阅读约 4 分钟阅读

GitHub 原生 Stacked PR 上手教程:gh stack 命令怎么用、怎么合并、老分支怎么转

GitHub 原生 Stacked PR 上手教程:gh stack 命令怎么用、怎么合并、老分支怎么转

先把搜索者最常问的几件事直接说清:

  • 这是什么:Stacked PR(堆叠式 PR)= 把一个大改动拆成一串有依赖顺序的小 PR,每个 PR 只含自己那一层的 diff,逐层评审,最后可以一键把整串合入。
  • 什么时候上线的:GitHub 于 2026 年 7 月 30 日将其作为原生功能开启公测(public preview),逐步推送到所有仓库——在此之前你只能靠 Graphite、spr、git-branchless 这类第三方工具模拟。
  • 收费吗:不收费,不是付费计划专属功能。CLI 扩展 gh-stack 免费安装。
  • 在哪用:github.com 网页、gh 命令行、GitHub 移动端都支持;还有配套的 AI agent skill。

一、五分钟上手:从零建一个 stack

前提:装好 GitHub CLI(v2.0+,Windows/macOS/Linux 都有官方安装包),然后装官方扩展:

gh extension install github/gh-stack

核心心智模型:一个 stack 是一列有序分支,每层建立在下一层之上,最底层基于主干(通常是 main):

frontendPR #3 (base: api-endpoints) ← 顶层
api-endpointsPR #2 (base: auth-layer)
auth-layerPR #1 (base: main)          ← 底层
─────────────
main (trunk)

完整流程:

# 1. 建 stack(创建并切到第一个分支)
gh stack init

# ...在第一层提交代码...

# 2. 在上面叠一层
gh stack add api-endpoints
# ...继续提交...

# 3. 推送所有分支
gh stack push

# 4. 查看整个 stack
gh stack view

# 5. 一次性开出整串 PR(每层一个,base 自动指向下一层)
gh stack submit

submit 之后,GitHub 会把这串 PR 链接成一个 Stack 对象:每个 PR 页面顶部出现 stack map,评审者能看到当前层在整串改动中的位置,且每个 PR 只显示本层的 diff。

一个顺手的技巧:gh stack add -Am "Add login endpoint" 可以一条命令完成"暂存全部改动 + 提交 + 自动按日期生成分支名 + 叠新层"。

二、评审与合并:最关键的三条规则

  1. 各层可以并行评审。不同同事评不同层互不阻塞,这正是它对"AI 时代 PR 越来越大"这个痛点的解法。官方公告里 TED 的 CTO 说得直白:AI 让开发者产出暴涨后,评审成了新瓶颈,把大改动拆成有依赖顺序的小块后,"评审不只是更快了,而是更准了"。
  2. 可以只合并其中一部分。合并一个或几个下层 PR,上面的 PR 会保持打开,并自动 rebase 和重定向 base(比如 PR #1 合入 main 后,PR #2 的 base 自动改成 main)。
  3. 也可以一键合并整串。合并最上面一个"ready"的 PR,它和下面所有未合并的层会一次性全部落地。分支保护和 required checks 依旧生效,管的是最终进入 main 的内容。

Merge queue(合并队列)对 stack 的支持在公测后数周内逐步推送——重度依赖 merge queue 的团队用前先确认自己仓库已生效。

三、已有的分支/PR 怎么转成 stack

不用重来。gh stack init 支持采纳现有分支

# 把两个已存在的分支按顺序收编成一个 stack
gh stack init feature-auth feature-api

# 主干不是 main?指定 trunk
gh stack init --base develop feature-auth

同事的 stack 也可以直接拉下来接着干:

gh stack checkout 42        # 按 PR 号
gh stack checkout <PR URL>  # 按 PR 链接
gh stack checkout           # 交互式选择器,列出本地+远端所有 stack

四、日常维护:rebase 与 sync

底层改了、main 前进了,上面各层怎么跟上?两个命令:

# 拉取远端 + 从主干向上逐层级联 rebase
gh stack rebase

# 一条命令完成:拉取、对齐远端 stack、级联 rebase、推送、同步 PR 状态
gh stack sync

细节上官方想得比较周到:init 时自动开启 git rerere(冲突解法会被记住,跨层 rebase 不用反复解同一个冲突);rebase 冲突时会打印冲突文件和行号,解完 git addgh stack rebase --continue,想整体撤销用 --abort 一键回到 rebase 前状态;某层 PR 已被合并时,rebase 自动切换 --onto 模式正确重放提交。

stack 的元数据存在本地 .git/gh-stack(JSON 文件,不入库)。

五、常见问题 FAQ

Stacked PR 是付费功能吗?

不是。公测阶段逐步推送到所有仓库,CLI 扩展免费。

能只合并 stack 里的一个 PR 吗?

能,方向有讲究:合并下层,上层自动 rebase 重定向、保持打开;合并上层,它下面所有未合并的层会一起落地。想逐个落地就从最底层开始合。

Windows 上能用吗?

能。gh CLI 官方支持 Windows/macOS/Linux,gh-stack 通过 gh extension install 跨平台安装,命令行为一致。

网页上能建 stack 吗,还是必须用命令行?

官方口径是 stack 可以在 github.com、CLI 和移动端上操作:网页流程是先开第一个 PR,再在其上叠加分支和 PR(每个 PR 的 base 指向下一层)。命令行的 init/add/submit 是效率最高的路径。

和 Graphite、spr 这类第三方工具比呢?

最大差异是原生:stack map 直接长在 PR 页面里、分支保护/required checks/merge queue 官方打通、评审者不需要装任何东西。第三方工具多年来填的坑(级联 rebase、base 自动重定向)现在是平台内置行为。

AI 编码代理能用它吗?

官方发布了配套 skill:gh skill install github/gh-stack,装完你的 AI agent(如 Copilot、Claude Code)就知道如何用 gh stack 全套命令管理堆叠 PR。

什么时候正式 GA?

官方未公布时间表,目前是 public preview,功能可能变化。反馈渠道是官方 stacks discussion(gh.io/stacks-feedback)。

参考资料

相关文章

GitHub OAuth 登录突然全挂:一次 RFC 9207 灰度撞上 Auth.js 占位 issuer 的排查实录

某天 GitHub 登录突然回调报 error=Configuration,两台服务器同时挂,而当天恰好上线了数据库读写分离——第一反应当然是怀疑部署。本文复盘如何用依赖 lock diff + 数据库最后成功登录时间排除部署嫌疑,定位到真正根因:GitHub 2026 年 4 月起分批灰度 RFC 9207(回调注入 iss 参数),撞上 Auth.js 给无 issuer provider 用的占位符校验。修复只有一行,但排查方法和「探针验证法」值得留档。

github踩坑实录+3
pitfalls2026年8月29日5 min
61

GitHub 宕机 7 个半小时那天,Cursor 发布了自己的代码托管平台

8 月 17 日 GitHub 经历了 7 小时 35 分的 critical 级事故——这是它两个月内的第 9 次 critical。同一天,Cursor 发布代码托管平台 Origin。一边是耐心耗尽的 Hacker News 认真讨论搬家,一边是带着 SpaceX 600 亿美元资本入场的挑战者。护城河开始松动了吗?我们把两件事的数据都核了一遍。

开发者工具github+4
developer2026年8月18日6 min
229

私有仓库的文章如何自动同步到公开镜像站:GitHub Actions 跨仓库推送方案

如果你有一个私有 GitHub 仓库存放代码和文章,但又希望文章内容公开可访问,可以通过公开镜像仓库 + GitHub Actions 自动同步来实现。本文记录了一次完整的实施过程,包括跨仓库 Token 配置、同步工作流设计和常见注意事项。

cicdgithub-actions+4
developer2026年7月23日4 min
214

1.5MB 的容器运行时,没有 daemon:Kern 想把容器变成库

Kern 把容器和资源运行时塞进 1.5MB 单二进制,没有常驻 daemon。本文拆解无 daemon 进程模型、1.5MB 意味着什么、为什么这是 Docker 以来十年演进的必然,以及为什么现在别急着迁移。

developer2026年8月26日6 min
99