注意
此功能以公共预览版提供,可能会发生更改。
GitHub CLI 的 gh stack 扩展可从本地仓库创建和管理拉取请求堆栈。 有关堆栈的简介,请参阅 堆积拉取请求。
安装
gh extension install github/gh-stack
该扩展需要 GitHub CLI(gh)2.0 或更高版本。
注意
gh stack 扩展使用你的 GitHub CLI 身份验证。 如果尚未进行身份验证,请运行 gh auth login。
命令摘要
| 命令 | Purpose |
|---|---|
gh stack init | 初始化当前存储库中的新堆栈。 |
gh stack add | 在当前堆栈的顶部添加新分支。 |
gh stack view | 查看当前堆栈。 |
gh stack checkout | 按堆栈编号、拉取请求编号、拉取请求 URL 或分支名称查看堆栈。 |
gh stack modify | 以交互方式重构当前堆栈。 |
gh stack unstack | 将堆栈从本地跟踪中移除,并在 GitHub 上取消堆叠。 |
gh stack submit | 推送所有分支,然后在 GitHub 上创建或更新拉取请求和堆栈。 |
gh stack sync | 在单个命令中提取、重新数据库、推送和同步拉取请求状态。 |
gh stack rebase | 从远程拉取并跨堆栈运行级联存储库。 |
gh stack push | 将当前堆栈中的活动分支推送到远程。 |
gh stack link | 在不进行本地跟踪的情况下将拉取请求链接到堆栈 GitHub 中。 |
gh stack merge | 一次合并一个或多个堆叠式拉取请求。 |
gh stack switch | 以交互方式切换到堆栈中的另一个分支。 |
gh stack up | 向上朝栈顶移动,远离主干。 |
gh stack down | 向下移至堆栈底部,朝主干方向移动。 |
gh stack top | 跳转到栈顶。 |
gh stack bottom | 跳转到堆栈底部。 |
gh stack trunk | 切换到主干分支。 |
gh stack alias | 创建短命令别名,以便可以少键入。 |
gh stack feedback | 分享有关 gh stack 扩展的反馈。 |
堆栈管理
gh stack init
初始化当前存储库中的新堆栈。
gh stack init [flags] [branches...]
在本地初始化新堆栈。 在交互模式下(无参数),该命令会提示输入分支名称,并提供将当前分支用作第一层的选项。
提供显式分支名称时,会自动采用现有分支,并创建任何缺失的分支。 中继默认为存储库的默认分支,除非使用 --base替代它。
该命令会自动启用 git rerere,以便在多次变基过程中记住冲突解决方案。
| Flag | 说明 |
|---|---|
-b, --base <branch> | 堆栈的中继分支(默认为存储库的默认分支) |
例子:
# Interactive — prompts for branch names
gh stack init
# Non-interactive — specify first branch upfront
gh stack init feature-auth
# Use a different trunk branch
gh stack init --base develop feature-auth
# Adopt or create multiple branches at once
gh stack init feature-auth feature-api feature-ui
gh stack add
在当前堆栈的顶部添加新分支。
gh stack add [flags] [branch]
对于现有堆栈,在当前 HEAD 处创建新分支,将其添加到堆栈顶部,并签出它。必须在堆栈的最顶层分支上运行此命令。 如果未提供分支名称,命令会提示你输入一个分支名称。
当你在一个不属于某个堆栈的分支上以交互方式运行该命令时,add 会转而提示你初始化一个新堆栈。 你提供的分支名称或自动生成的名称将成为第一层。 如果未提供名称,则使用标准 init 提示。
您可以选择在 add 流程中暂存更改并创建提交。 在没有显式分支名称的情况下提供 -m 时,分支名称会以日期和时间格式自动生成,例如 03-24-add_login。
| Flag | 说明 |
|---|---|
-A, --all | 暂存所有更改,包括未跟踪的文件。 需要 -m。 |
-u, --update | 仅暂存对已跟踪文件的更改。 需要 -m。 |
-m, --message <string> | 创建分支之前使用此消息创建提交 |
注意
-A和-u是互相排斥的。
例子:
# Create a branch by name
gh stack add api-routes
# Prompt for a branch name interactively
gh stack add
# Stage all changes, commit, and auto-generate the branch name
gh stack add -Am "Add login endpoint"
# Stage only tracked files, commit, and auto-generate the branch name
gh stack add -um "Fix auth bug"
# Commit already-staged changes and auto-generate the branch name
gh stack add -m "Add user model"
# Stage all changes, commit, and use an explicit branch name
gh stack add -Am "Add tests" test-layer
# Stage only tracked files, commit, and use an explicit branch name
gh stack add -um "Update docs" docs-layer
gh stack view
查看当前堆栈。
gh stack view [flags]
显示堆栈中的所有分支、它们的排列顺序、拉取请求链接以及最新提交及其相对时间戳。 默认情况下,该命令在交互式终端中打开全屏视图,并在非交互式终端中打印静态输出。
--short 和 --json 标志在任一环境中都直接输出到标准输出。
| Flag | 说明 |
|---|---|
-s, --short | 压缩每分支一行输出 |
--json | 将堆栈数据输出为 JSON |
例子:
gh stack view
gh stack view --short
gh stack view --json
gh stack view --short 在终端支持 OSC 8 超链接时,会为拉取请求编号使用 OSC 8 超链接。 否则,将显示用于复制和粘贴的完整 URL。 设置 GH_STACK_HYPERLINKS=1 或 GH_STACK_HYPERLINKS=0 替代终端检测。
gh stack checkout
按堆栈编号、拉取请求编号、拉取请求 URL 或分支名称查看堆栈。
gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
空数首先解释为堆栈或拉取请求编号。 这些是显示在 GitHub 界面中的存储库范围内的标识符。 如果没有任何内容匹配该数字,则会尝试将其作为分支名称。
引用远程堆栈时,该命令会提取堆栈 GitHub,拉取分支,并在本地设置堆栈。 如果堆栈已存在于本地并匹配,则命令会切换到分支。 如果本地堆栈和远程堆栈具有不同的组合,系统会提示你解决冲突。
提供分支名称时,该命令首先检查本地跟踪的堆栈。 如果未在本地跟踪分支,该命令将查找远程堆栈上的分支并拉取匹配堆栈。 如果有多个堆栈匹配,请使用堆栈编号或拉取请求编号来明确指定其中一个。
在交互式终端中运行不带参数的命令时,它会首先检查当前分支是否属于远端上存在但未在本地跟踪的某个堆栈,并提示你将其检出。如果没有唯一匹配项,或者你拒绝这样做,它就会打开一个可搜索的选择器,列出你可用的所有堆栈,包括本地已跟踪的堆栈,以及仅存在于 GitHub 上的堆栈。 每行显示堆栈号、其底部和顶部分支、基分支、状态栏,汇总了其拉取请求的合并、打开、关闭或尚未推送的数量,以及堆栈是在本地可用还是仅在远程上可用。 使用 “全部”、“ 本地” 和 “远程 ”选项卡进行筛选,或键入 / 搜索。 将省略完全合并的堆栈。 选择仅远程堆栈时,系统会先将其克隆到本地,然后再切换到该堆栈。
例子:
# Check out a stack by its stack number
gh stack checkout 7
# Check out a stack by pull request number
gh stack checkout 42
# Check out a stack by pull request URL
gh stack checkout https://github.com/owner/repo/pull/42
# Check out a stack by branch name
gh stack checkout feature-auth
# Interactive — pick from all available stacks (local and remote)
gh stack checkout
gh stack modify
以交互方式重构当前堆栈。
gh stack modify [flags]
打开用于重组堆栈的交互式终端 UI。 所有更改都会先在界面中暂存,并在您按下 Ctrl+S 时统一应用。 无法修改来自已合并拉取请求的分支。
| Flag | 说明 |
|---|---|
--continue | 解决冲突后继续 |
--abort | 中止修改会话,并在运行命令之前将堆栈还原到其状态 |
前提 条件
该命令在打开接口之前检查这些条件:
- 您必须已在本地检出当前活动堆栈。
- 工作树必须干净,没有未提交的更改。
- 没有正在进行的重新基。
- 该堆栈中没有任何拉取请求处于待合并队列中。
- 提交历史必须保持线性,不得包含合并提交,也不得有分叉的分支。
Operations
| 运算 | 密钥 | Effect |
|---|---|---|
| Drop | ||
| x | 从堆栈中删除分支及其提交记录。 本地分支和相关的拉取请求将被保留。 | |
| 向下折叠 | ||
| d | 将提交内容吸收到下面的分支中,指向中继。 折叠分支将从堆栈中删除。 | |
| 向上折叠 | ||
| u | 将提交吸收到上方的分支中,使其远离主干。 折叠分支将从堆栈中删除。 | |
| 在下方插入 | ||
| i | 在光标下方插入一个新的空分支,靠近主干。 | |
| 在上方插入 | ||
| 我 | 在光标上方插入一个新的空分支,朝远离主干的方向。 | |
| 下移 | ||
| 转变+ | 将分支向下重新排序,朝主干方向。 | |
| 上移 | ||
| 转变+→ | 将分支上移,远离主干。 | |
| Rename | ||
| r | 使用内嵌提示重命名分支。 | |
| Undo | ||
| Z | 撤消最后一个暂存操作。 |
应用阶段
当你按下 Ctrl+S 时,系统会通过重命名分支、插入新分支、合并或移除分支以及执行级联变基,来应用暂存的更改,并生成符合所需堆栈状态的线性提交历史。
如果发生变基冲突,你可以选择:
- 解决冲突,暂存文件,然后运行
gh stack modify --continue。 - 运行
gh stack modify --abort以中止操作并将堆栈还原到其以前的状态。
修改后
如果您已在 GitHub 上创建了一个拉取请求堆栈,请运行 gh stack submit 以推送更新后的分支并重新创建该堆栈。 旧堆栈会自动替换。
例子:
# Open the interactive modify interface
gh stack modify
# Continue after resolving a conflict
gh stack modify --continue
# Abort and restore to the previous state
gh stack modify --abort
gh stack unstack
将堆栈从本地跟踪中移除,并在 GitHub 上取消堆叠。 此命令也可用作 gh stack delete.
gh stack unstack [<stack-number>] [flags]
如果不带参数,该命令将以当前活动堆栈为目标,即包含当前已检出分支的堆栈。 它会取消 GitHub 上该堆栈的堆叠状态,并删除本地跟踪信息。
要取消堆叠指定的堆栈,请提供堆栈编号,即堆栈 UI 的 GitHub 上显示的标识符。 这在仓库中的任何位置都可执行,无论该堆栈是否已在本地签出,因为可以直接通过 GitHub API 对该堆栈执行 unstack 操作。 当堆栈也在本地可用时,也会删除其本地跟踪。
在 GitHub 上,已合并、正在合并或已排队等待合并的拉取请求无法从堆栈中移除,同时仍作为该堆栈的一部分保留。 当所有拉取请求都被移除时,该堆栈将被解散,并且所有本地跟踪信息也会被删除。 当某些拉取请求仍处于堆叠状态时,堆栈会被保留,而本地跟踪信息(如果有)则保持不变。 用于 --local 跳过远程操作并仅删除本地跟踪。
当需要通过删除分支、插入分支、重新排序分支、重命名分支或进行其他大型更改来重构堆栈时,此命令非常有用。 取消堆叠后,使用 gh stack init 按所需结构重新创建堆栈。 现有分支会被自动继承。
| Flag | 说明 |
|---|---|
--local | 仅在本地删除堆栈,使其保持打开状态 GitHub |
例子:
# Unstack the current stack on GitHub and remove local tracking
gh stack unstack
# Unstack a specific stack by its number
gh stack unstack 7
# Only remove local tracking
gh stack unstack --local
远程操作
gh stack submit
推送所有分支,然后在 GitHub 上创建或更新拉取请求和堆栈。
gh stack submit [flags]
为堆栈中的每个分支创建拉取请求,将分支推送到远程分支。 创建拉取请求后, submit 会自动创建堆栈 GitHub 以将拉取请求链接在一起。 如果该堆栈已存在于 GitHub 上(例如由于之前的一次提交),则新的拉取请求会被添加到现有堆栈中。
如果堆栈中的每个拉取请求都已合并,该堆栈已完成且无法扩展。 在这种情况下,submit 会自动为你尚未合并的分支新建一个以主干分支为根的堆栈,并在 GitHub 上创建该堆栈,同时保持已合并的堆栈不变。
在交互式终端中, submit 在单个屏幕上打开全屏编辑器。
- 左面板。 默认情况下,所有未创建拉取请求的分支都会被包含在内。 取消选择不想使用 Ctrl+X 提交的任何项。 由于每个拉取请求都基于其下方的分支,因此,取消选择某个分支也会同时取消选择堆叠在其上的分支;而重新选中某个分支时,也会重新选中它所依赖的、位于其下方的分支。 已存在拉取请求的分支(无论是开放、草稿、排队中还是已合并)都会显示出来以供参考,但已锁定。 在 Web 上编辑这些内容。
- 右侧面板。 对于重点分支,起草标题和说明,并选择拉取请求是已打开以供审阅还是作为草稿打开。 说明将根据您的仓库中的拉取请求模板或提交内容预先填入,并提供 Markdown 预览。 若要在外部编辑器中编辑说明,请按 Ctrl+E。 该扩展按此顺序使用环境变量
GH_EDITOR、VISUAL和EDITOR中第一个非空的值。 如果未设置任何值,则会使用您vi上的可用PATH。 聚焦到锁定的分支时,会显示一个只读卡片,其中包含指向其拉取请求的链接。 按 o 在浏览器中打开它。
按 Ctrl+S 一次性提交所有包含的拉取请求。 编辑器支持键盘和鼠标输入。 传入 --auto,或在 CI 等非交互式终端中运行该命令,以跳过编辑器并使用自动生成的标题。
如果这些分支已经有打开的拉取请求,但 GitHub 上尚不存在堆栈,您可以使用 Ctrl+B 将这些拉取请求链接成一个堆栈。
在编辑器中,新的拉取请求默认处于可供审查状态。 您可以使用该切换开关将任何拉取请求切换为草稿状态。 使用 --auto 时,除非传递 --open,否则新建的拉取请求会默认为草稿。
| Flag | 说明 |
|---|---|
--auto | 跳过编辑器并使用自动生成的拉取请求标题 |
--open | 创建新的拉取请求(准备审阅而不是草稿),并将现有拉取请求标记为准备审阅 |
--remote <name> | 要推送到的远程仓库(默认为自动检测到的远程仓库) |
例子:
gh stack submit
gh stack submit --auto
gh stack submit --open
gh stack sync
在单个命令中提取、重新数据库、推送和同步拉取请求状态。
gh stack sync [flags]
同步整个堆栈。
- 获取。 从
origin中获取最新更改。 - 协调远程堆栈。 在本地镜像 GitHub 上的堆栈。 当在 GitHub 上向堆栈中添加了拉取请求,使远程堆栈领先于本地堆栈时,这些分支会被自动拉取下来,并追加到本地堆栈中。 当本地堆栈和远程堆栈确实出现分歧时,例如你在本地添加了一个分支,而与此同时,不同的拉取请求又被添加到了 GitHub 上的该堆栈中,系统会提示你解决这种差异。 请参阅 分化堆栈。 在非交互式终端中,如果出现分歧,同步会中止,并且不会推送或更新任何内容。
- 快进主干。 将主干分支快进到与远程分支一致。 如果分支存在分歧,则会跳过此步骤。
- 级联变基。 仅当主干分支发生变动时,才将栈中的所有分支重新定基到其已更新的父分支上。 如果检测到冲突,所有分支将还原到其原始状态,建议以交互方式运行
gh stack rebase以解决冲突。 - 按下。 推送所有分支,如果发生过变基,则使用
--force-with-lease。 - 同步拉取请求。 从 GitHub 同步拉取请求状态,并报告每个拉取请求的状态。
- 同步堆栈。 在 GitHub 上将该堆栈中开放的拉取请求关联为一个堆栈;如果远程堆栈对象尚不存在,则创建该对象;如果该对象仅已部分创建,则对其进行更新。 仅当存在两个或多个拉取请求时,才会发生这种情况。 Sync 绝不会创建拉取请求。 使用
gh stack submit来实现。 - 修剪。 在交互式终端中,提示您删除与已合并拉取请求相关联的本地分支。 使用
--prune进行自动清理。
在本地堆栈顶部添加拉取请求的全新远程预更新会自动拉取,无需提示即可自动拉取,因此 sync 可以安全地在自动化中运行。 仅当堆栈确实出现差异时,才提示同步。
分叉的堆栈
如果两个堆栈都不是另一个堆栈的干净前缀,例如,由于你在本地添加了分支,同时将单独的拉取请求添加到同一堆栈时 GitHub,同步无法自动合并这两个分支。 在交互式终端中,它提供了三种选择。
- 使用远程堆栈作为事实来源。 将本地堆栈组成替换为远程的堆栈组成,并拉取所有缺失的分支。 如果你处于远程堆栈中已不再包含的分支上,则会被移至最近的仍然存在的分支。 这需要一个干净的工作状态,且没有未提交的更改。
- 在 GitHub 上删除堆栈。 删除堆栈对象 GitHub 并停止同步。拉取请求和本地分支保持不变,仅删除堆栈 GitHub 。 使用
gh stack submit重新创建堆栈;如果要更改其结构,请先运行gh stack modify。 这是让 GitHub 与本地堆栈保持一致的方法,因为submit不同于sync,它还会为任何尚未提交的分支创建拉取请求。 - 取消。 在不推送分支或更新任何拉取请求的情况下中止同步。
在非交互式终端中,如果出现分叉,同步将中止并成功退出,且不会推送分支或更新拉取请求。 通过取消堆栈和重新创建堆栈来解决此问题。
| Flag | 说明 |
|---|---|
--remote <name> | 从远程提取和推送到 (默认为自动检测到的远程) |
--prune | 删除已合并拉取请求的本地分支 |
例子:
gh stack sync
# Sync and automatically prune merged branches
gh stack sync --prune
gh stack rebase
从远程拉取并跨堆栈运行级联存储库。
gh stack rebase [flags] [branch]
从 origin 获取最新更改,然后确保堆栈中的每个分支在其提交历史中都包含上一层的顶端提交。 分支会按照顺序依次进行变基,从主干开始向上。
如果某个分支的拉取请求已被合并,变基会自动切换到 --onto 模式,以便在合并目标之上正确重新应用提交。
如果发生变基冲突,该操作会暂停并输出发生冲突的文件及其行号。 解决这些冲突后,使用 git add 将其加入暂存区,然后继续执行 --continue。 若要撤消整个变基,请使用 --abort 将所有分支恢复到变基前的状态。
| Flag | 说明 |
|---|---|
--downstack | 仅将从主干分出的分支变基到当前分支 |
--upstack | 仅对从当前分支到顶部的分支执行变基 |
--no-trunk | 跳过主干。 仅在堆栈分支之间进行变基,不执行抓取,也不进行主干变基。 |
--continue | 解决冲突后继续重定基 |
--abort | 中止变基并将所有分支恢复到变基前的状态 |
--remote <name> | 从远程提取(默认为自动检测到的远程) |
--committer-date-is-author-date | 在变基期间将提交者日期设置为作者日期。 别名: --preserve-dates. |
| 论点 | 说明 |
|---|---|
[branch] | 目标分支(默认为当前分支) |
例子:
# Rebase the entire stack
gh stack rebase
# Only rebase branches below the current one
gh stack rebase --downstack
# Only rebase branches above the current one
gh stack rebase --upstack
# Rebase stack branches without pulling from or rebasing with trunk
gh stack rebase --no-trunk
# After resolving a conflict
gh stack rebase --continue
# Abort rebase and restore everything
gh stack rebase --abort
# Rebase and preserve committer date as author date
gh stack rebase --committer-date-is-author-date
gh stack push
将当前堆栈中的活动分支推送到远程。
gh stack push [flags]
在单个 git push 中推送所有活动分支(已合并和已排队的分支除外),并对每个分支执行显式的 --force-with-lease 检查。 该更新不是原子操作。 即使另一个分支被拒绝,租约检查通过的分支也可以更新。 修复已拒绝的分支,并再次运行该命令。 已更新的分支保持不变。 此命令不创建或更新拉取请求。 使用 gh stack submit 来实现。
| Flag | 说明 |
|---|---|
--remote <name> | 要推送到的远程仓库(默认为自动检测到的远程仓库) |
例子:
gh stack push
gh stack push --remote upstream
gh stack link
在不进行本地跟踪的情况下将拉取请求链接到堆栈 GitHub 中。
gh stack link [flags] <stack-number | branch-or-pr> <branch-or-pr> [...]
根据分支名称或拉取请求编号和 URL,在 GitHub 上创建或更新堆栈。 此命令不会创建或修改任何本地跟踪状态。 它专为那些在本地借助其他工具(如 Jujutsu、Sapling 或 git-town)管理分支,并希望发起 Pull Request 栈的用户而设计。 请参阅“将其他工具与堆叠式拉取请求配合使用”。
按堆栈顺序提供自变量,从下到上。 在创建或查找拉取请求之前,分支参数会自动推送到远程。 对于已打开拉取请求的分支,将使用这些拉取请求。 对于没有拉取请求的分支,系统会自动创建新的拉取请求,并正确建立基分支的链式关系。 基本分支与预期链不匹配的现有拉取请求会自动更正。
如果拉取请求尚不在堆栈中,则会创建一个新堆栈。 如果某些拉取请求已在堆栈中,则会更新现有堆栈以包含新的拉取请求。 现有拉取请求永远不会从堆栈中删除,因为更新仅累加。
若要增大现有堆栈而不再次列出其拉取请求,请传递堆栈编号(堆栈 UI GitHub中显示的数字)作为第一个参数。 其余参数将追加到该堆栈的顶部。 跳过堆栈中已有的参数,而属于不同堆栈的参数将被拒绝。 由于堆栈和拉取请求编号永远不会重叠,因此仅当数字第一个参数与现有堆栈匹配时,才会将其视为堆栈。 否则,则会被视为拉取请求或分支。
| Flag | 说明 |
|---|---|
--base <branch> | 堆栈底部的基分支(默认为存储库的默认分支)。 添加到现有堆栈时,将忽略此标志。 |
--open | 将新的和现有的拉取请求标记为可供审查 |
--remote <name> | 要推送到的远程仓库(默认为自动检测到的远程仓库) |
例子:
# Link branches into a stack (pushes, creates pull requests, creates stack)
gh stack link feature-auth feature-api feature-ui
# Link existing pull requests by number
gh stack link 10 20 30
# Link existing pull requests by URL
gh stack link https://github.com/owner/repo/pull/10 https://github.com/owner/repo/pull/20
# Add branches to an existing stack of pull requests
gh stack link 42 43 feature-auth feature-ui
# Append to the top of an existing stack by its stack number, with no need
# to list the pull requests already in stack 7 again
gh stack link 7 48 feature-ui
# Use a different base branch and mark pull requests as ready for review
gh stack link --base develop --open feat-a feat-b feat-c
gh stack merge
一次合并一个或多个堆叠式拉取请求。
gh stack merge [<stack-number> | <pr-number>]
将堆栈中的每个拉取请求(最多包括所选拉取请求)合并到基分支中。 合并是一次性、要么全部成功要么全部失败的操作。 如果任何拉取请求都无法合并,则这些拉取请求都不会被合并。
在没有参数的情况下,该命令使用活动本地堆栈。 提供堆栈编号以合并一个您未检出的堆栈,该操作完全在远程执行;或者提供拉取请求编号,以直接合并直到该拉取请求为止。
在交互式终端中,该命令会提示你选择要合并的拉取请求、选择合并方式并进行确认。 在非交互式终端中,或者当你使用 --yes 时,整个堆栈,或者直到你指定的拉取请求为止的所有内容,都会在不进行提示的情况下被合并;除非你另行指定,否则将使用你上次使用的合并方式。
合并之前仅检查基本拉取请求状态。 每个拉取请求都必须处于打开状态,并且不得为草稿。 GitHub 评估合并运行时的分支保护和存储库规则,并将任何故障报告回你。
注意
合并堆叠式拉取请求时,不能绕过合并要求。
如果基分支使用合并队列,则会将堆栈添加到队列中,而不是直接合并。 由队列选择合并方法,因此提示会跳过“合并方法”这一步,并且会发出警告,忽略 --merge-method、--squash、--rebase 和 --merge 标志。 您选择的拉取请求会一起添加到队列中,但在队列处理它们的过程中会陆续合并,因此它们可能会分别进入不同的批次,而不是一次全部合并。
| Flag | 说明 |
|---|---|
--merge-method <method> | 要使用的合并方法:merge、squash 或 rebase |
--merge、--squash、--rebase | 相应合并方法的简写 |
-y, --yes | 合并而不提示确认 |
例子:
# Merge the current stack, choosing pull requests interactively
gh stack merge
# Merge a stack you do not have checked out, by stack number
gh stack merge 7
# Merge everything up to and including pull request 42
gh stack merge 42
# Merge the whole current stack without prompting, squashing commits
gh stack merge --yes --squash
Navigation
导航命令可在当前堆栈中的分支之间移动,而无需记住分支名称。 堆栈底部是离主干最近的分支,顶部是距离主干最远的分支。
up 远离树干移动,而 down 朝树干移动。
所有导航命令都被限制在堆栈边界内。 在顶部继续向上移动,或在底部继续向下移动时,不会执行任何操作,并会显示一条消息。
gh stack switch
以交互方式切换到堆栈中的另一个分支。
gh stack switch
显示一个交互式选择器,其中列出当前堆栈中的所有分支,并附带各自的位置编号,按从上到下的顺序排列:顶部离主干最远,底部离主干最近。 选择一个分支以切换到该分支。
此命令需要交互式终端。
例子:
gh stack switch
# → Select a branch in the stack to switch to
# 5. frontend
# 4. api-endpoints
# 3. auth-layer
# 2. db-schema
# 1. config-setup
gh stack up
向上朝栈顶移动,远离主干。
gh stack up [n]
向上移动 n 个分支,默认为 1。 如果你在主干分支上,up 则移动到第一个堆栈分支。
例子:
# Move up one layer
gh stack up
# Move up three layers
gh stack up 3
gh stack down
向下移至堆栈底部,朝主干方向移动。
gh stack down [n]
向下移动 n 个分支,默认为 1。
例子:
# Move down one layer
gh stack down
# Move down two layers
gh stack down 2
gh stack top
跳转到栈顶。
gh stack top
检出距主干最远的分支。
gh stack bottom
跳转到堆栈底部。
gh stack bottom
检出最接近主干的分支。
gh stack trunk
切换到主干分支。
gh stack trunk
检查当前堆栈的中继分支,例如 main。 你当前所在的分支必须属于某个堆栈。
Utilities
gh stack alias
创建短命令别名,以便可以少键入。
gh stack alias [flags] [name]
将一个小型包装脚本安装到 ~/.local/bin/ 中,该脚本会将所有参数转发给 gh stack。 默认别名为 gs,但可以通过将其作为参数传递来选择任何名称。 安装后,可以运行 gs push 而不是 gh stack push。
在Windows,不支持自动创建别名。 该命令输出有关创建批处理文件或 PowerShell 函数的手动说明。
| Flag | 说明 |
|---|---|
--remove | 删除之前创建的别名 |
例子:
# Create the default alias (gs), so that "gs push" and "gs view" both work
gh stack alias
# Create a custom alias
gh stack alias gst
# Remove an alias
gh stack alias --remove
gh stack alias --remove gst
gh stack feedback
分享有关 gh stack 扩展的反馈。
gh stack feedback [title]
在 gh-stack 存储库 中打开讨论,以便提交反馈。 可以选择为讨论文章提供标题。
例子:
gh stack feedback
gh stack feedback "Support for reordering branches"
环境变量
| 变量 | 值 | 说明 |
|---|---|---|
GH_STACK_THEME | ||
auto(默认)、light、dark | 控制交互式屏幕submit``modify``view的调色板以及所有彩色命令输出。 颜色自动适应终端背景。 将此变量设置为在终端不报告其背景时强制使用浅色或深色调色板,这可能会在某些 SSH 或 tmux 设置中发生。 | |
GH_STACK_HYPERLINKS | ||
0、1 | 当终端检测不正确时禁用或启用 OSC 8 超链接。 默认情况下,不受支持的终端显示完整的 URL。 |
# Force the light palette for one command
GH_STACK_THEME=light gh stack view
退出代码
| Code | Meaning |
|---|---|
| 0 | 成功 |
| 1 | 常规错误 |
| 2 | 不在堆栈中,或找不到堆栈 |
| 3 | 重新定基冲突 |
| 4 | |
| GitHub API 失败 | |
| 5 | 参数或标志无效 |
| 6 | 需要明确,因为该分支隶属于多个堆栈 |
| 7 | 变基已在进行中 |
| 8 | 堆栈被另一个进程锁定 |
| 9 | 未为此存储库启用堆积拉取请求 |
| 10 | 修改会话已中断,需要恢复 |