SuperAPI AI 工具集

merging-stacked-prs

编程与开发

查看项目

更新于 10-15 21:08

技能介绍

用途:落地一组相互依赖的 GitHub PR(堆栈),或合并一个以另一开放 PR 分支为基的 PR。核心原则是使用 GitHub 原生 stack 对象与 gh stack merge,不要用 gh pr merge 加 gh pr edit 逐个合并并改基来模拟堆栈语义。

主要能力与用法:先运行 gh stack --version 确认原生 stack 支持;若官方扩展或服务端 stack 功能不可用则硬停止,不降级为手动逐个合并。GitHub stack 要求所有 head 分支位于同一仓库,跨 fork 链需硬停止。使用干净的专用 worktree,用 gh pr view <pr> --json ... 获取实时 PR 元数据与精确 head OID,不信任分支名或旧报告。用 GraphQL 查询 PullRequest.stack 与 stackEntry.position 确认堆栈成员身份,条目超过一页时分页。

若依赖 PR 尚未加入官方 stack:先精确比对每个 author.login;全部一致时按自底向上顺序自动链接:gh stack link --base <trunk> <bottom-pr> <next-pr> ... <top-pr>;作者不一致或不可用则先询问用户。之后重新查询 GraphQL,要求只有一个 stack 编号、预期 trunk、完整 PR 集合及预期位置与基链。绝不自动解散、重排或重建已有 stack。

仅在需要时刷新:原生级联 rebase 可用 gh stack checkout <pr-or-stack> 与 gh stack sync,冲突时用 gh stack rebase 解决后 gh stack push 发布;也可采用增量 merge-forward。任何历史重写后需重新获取精确 head 并重审评审线程、批准、可合并性与检查。

合并前预检:重新查询官方 stack,要求每个选中 PR 为 open、非草稿、顺序正确且满足仓库评审与检查要求。整栈落地用 gh stack merge <stack-number> --yes --merge;显式部分落地用 gh stack merge <boundary-pr> --yes --merge。不要传 --delete-branch、不要手动改基、不要逐 PR 合并。

验证:等待每个选中 PR 报告 MERGED,用 gh pr view <pr> --json number,state,mergedAt,mergeCommit,baseRefName,headRefName 确认。部分落地后重新查询官方 stack,确认剩余 PR 仍按预期顺序链接。分支删除仅在对应 PR 报告 MERGED 后单独进行,删除前用 gh pr list --state open --base <branch> --json number --jq length 确认结果为 0。

限制:依赖原生 stack 支持与同仓库分支;直接 stack 合并是全有或全无;使用 merge queue 时可能分批落地;不得绕过合并要求,遇阻塞应解决或停止报告,绝不回退到 gh pr merge。