gh stack view完全参考:用--short和--json掌握Stack状态
【免费下载链接】gh-stackGitHub Stacked PRs项目地址: https://gitcode.com/GitHub_Trending/ghst/gh-stack
gh stack view是 gh-stack 堆叠 PR 工具中查看 Stack 状态的核心命令。一条命令列出当前 Stack 的所有分支、每个 PR 的合并/排队/开放状态和是否需要 rebase,并提供三种输出形态:交互式视图、--short紧凑视图和--json机器可读视图——前两者给人看,最后一种专为脚本和 AI Agent 设计 📊。
三种查看模式,各取所需
gh stack view的完整实现位于 cmd/view.go,三种模式一眼区分:
| 模式 | 命令 | 适用场景 | 特点 |
|---|---|---|---|
| 交互式 TUI | gh stack view | 日常开发 | 全屏界面,支持鼠标,可切换分支 |
| 紧凑视图 | gh stack view --short | 快速扫一眼 | 每个分支一行,带状态图标 |
| JSON 输出 | gh stack view --json | 脚本/CI/AI | 无交互提示,带类型化退出码 |
无论使用哪种模式,命令都会先从 GitHub 同步一次 PR 最新状态再展示,所以你看到的就是当前真实状态,而不是本地缓存的旧数据。
默认交互视图:分支、提交、PR 一站看全
在交互式终端中直接运行gh stack view,会打开一个全屏 TUI(基于 Alt Screen 渲染,支持鼠标操作)。它会展示:
- 📌 每个分支在 Stack 中的位置和当前分支(高亮)
- 📝 每个分支的最新提交:短 SHA、相对时间(如 "3 days ago")和提交标题
- 🔗 分支对应的 PR 链接
- ✅ 状态图标(下一节详解)
在 TUI 中选定某个分支后退出,还可以直接把它 checkout 出来,省去再敲一次git checkout。
在非交互式环境(如管道或 CI)中,命令会自动退化为静态文本输出,并通过分页器展示——遵循GIT_PAGER、PAGER环境变量,默认less -R。
--short 紧凑模式:分支状态一行看穿
gh stack view --short--short(可简写为-s)输出紧凑的单行视图,是整个命令中信息密度最高的模式。它的结构自上而下是:
Stack #N:Stack 编号(粗体),与 GitHub 界面上的编号一致- 活跃分支区:当前分支以
»开头并标注(current) queued分隔线:进入合并队列的分支merged分隔线:已合并的分支(灰色显示)└ main:底部的 trunk 分支
每个分支行后面还跟着彩色 PR 编号(绿色=开放,紫色=已合并),一眼定位要处理的 PR。
状态图标速查(四种图标,源码定义见 cmd/view.go 的branchStatusIndicator):
| 图标 | 含义 | 颜色 |
|---|---|---|
✓ | PR 已合并 | 紫色 |
◎ | PR 已进入合并队列 | 黄色 |
○ | PR 处于开放状态 | 绿色 |
⚠ | 分支需要 rebase(基分支不是其祖先) | 黄色 |
⚠图标尤其值得关注:它说明 Stack 历史不线性了,此时运行gh stack rebase做级联 rebase 即可恢复。
--json 机器可读模式:把 Stack 状态喂给脚本和 AI
gh stack view --json--json是自动化场景的瑞士军刀 🔧。它有两个关键设计(见 cmd/view.go 中runViewJSON):
- 永不弹出交互式提示——Agent 和脚本总能拿到干净的机器可读输出
- 返回类型化退出码——脚本可以据此分支处理,而不是解析错误文案
输出结构固定为三个顶层字段:
{ "trunk": "main", "currentBranch": "feat/02", "branches": [ { "name": "feat/01", "head": "bbb222", "base": "aaa111", "isCurrent": false, "isMerged": true, "isQueued": false, "needsRebase": false, "pr": { "number": 42, "url": "…", "state": "MERGED" } } ] }字段速查表(完整字段行为见 cmd/view_test.go 中的断言):
| 字段 | 说明 |
|---|---|
trunk | Stack 底部的 trunk 分支名 |
currentBranch | 当前所在分支 |
branches[].name/head/base | 分支名、HEAD 与基分支的 SHA |
branches[].isCurrent | 是否为当前分支 |
branches[].isMerged/isQueued | PR 是否已合并 / 已入合并队列 |
branches[].needsRebase | 是否需要 rebase(已合并分支恒为false) |
branches[].pr.state | OPEN/MERGED/QUEUED三选一 |
branches[].pr | 无 PR 时整个字段省略,不会输出null |
配合jq这类工具,"哪些分支需要 rebase"、"栈顶是哪个分支"这类问题都变成一行管道命令的事。
退出码速查:脚本怎么判断结果
gh stack view --json用不同退出码区分失败原因,便于自动化决策:
| 退出码 | 含义 | 建议处理 |
|---|---|---|
0 | 成功 | 正常解析 JSON |
1 | 一般错误 | 记录日志 |
2 | 不在任何 Stack 中 / 未找到 Stack | 提示先gh stack init |
4 | GitHub API 调用失败 | 检查认证或稍后重试 |
6 | 需要消歧:当前分支属于多个 Stack | 先 checkout 一个非 trunk 分支再试 |
💡 退出码
6是最容易踩的坑:当你在main上、且仓库里存在多个共用该 trunk 的 Stack 时就会触发。切到任意一个具体分支即可消除歧义。
实用搭配建议
- 🧑💻日常开发:跑
gh stack view看全景,跑之前先瞟一眼--short确认没有⚠ - 🤖AI Agent 集成:统一使用
--json,靠退出码做分支判断,无需解析彩色文本 - 🔁rebase 后验证:
gh stack rebase完成后再--json一次,确认needsRebase全部归零
命令的更多上下文(如sync、rebase如何影响 view 展示的状态)可在 docs/src/content/docs/reference/cli.md 中查阅。
总结
gh stack view一个命令、三种形态,覆盖了 Stack 状态查看的全部场景:
| 需求 | 用哪个 |
|---|---|
| 看提交、切分支、浏览 PR | 交互式 TUI |
| 终端里快速确认状态 | --short+ 四种状态图标 |
| 脚本 / CI / AI Agent 消费状态 | --json+ 退出码 |
掌握它,你就随时知道自己的 Stack 走到了哪一步 ✅。
【免费下载链接】gh-stackGitHub Stacked PRs项目地址: https://gitcode.com/GitHub_Trending/ghst/gh-stack
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考