注意
此功能以公共预览版提供,可能会发生更改。
在堆栈上循环访问时,通常需要在较低层进行更改、重新设置基以保留线性历史记录或重构其分支。 扩展 gh stack 处理 GitHub CLI 这些任务的级联操作,这些操作会更新每个受影响的分支。 请参阅“堆积拉取请求 CLI 命令”。
对较低层进行更改
在顶层上工作时,需要更改堆栈中较低的内容时,请在分支中进行更改并重新定基,而不是在当前层中对其进行处理。
-
导航到需要更改的分支。
Shell gh stack down
gh stack down还可以使用 <a0/a0> 查看特定分支
。 -
进行更改并提交。
Shell git add . git commit -m "helpful-commit-message"
git add . git commit -m "helpful-commit-message" -
重新设置上述分支的基,以拾取更改。
Shell gh stack rebase --upstack
gh stack rebase --upstack -
推送更新的分支并返回到工作位置。
Shell gh stack push gh stack top
gh stack push gh stack top
重排堆栈
堆栈必须在其分支之间具有线性历史记录,然后才能合并。 运行 gh stack rebase 会执行级联 rebase,其中每个分支都基于其下方的分支重新基于该分支, main因此每个分支从所有下层中选取最新更改。
-
重新定基堆栈。 默认情况下,这会将每个分支从底部重新设置为顶部。
Shell gh stack rebase
gh stack rebase若要限制 rebase,请使用
--downstack从最低层到当前分支的重设基,或--upstack从当前分支重新设置为顶部。 -
推送更新的分支。 这用于
--force-with-lease安全地更新重新基于的分支。Shell gh stack push
gh stack push
如果存储库遇到冲突, gh stack rebase 请停止并列出冲突的文件。
- 解决受影响文件中的标记,将其暂存
git add,然后运行gh stack rebase --continue。 - 若要重新开始,请运行
gh stack rebase --abort以将所有分支还原到其预重新数据库状态。
注意
还可以从拉取请求触发服务器端存储库,但这些提交未签名。 如果存储库需要签名的提交,请从 GitHub CLI 中重新设置提交,使提交遵循本地 Git 提交签名配置。
从 GitHub 网站重新开始
当堆栈不线性时,合并框中会显示 一个 Rebase 堆栈 按钮。 选择它会触发服务器端级联 rebase,
- 将整个堆栈重新定基在最新中继的顶部,例如
main。 - 将每个未合并的分支重新定基在其基分支的顶部,从堆栈底部向上工作。
- 强制推送每个重新基于的分支以更新远程。
重新数据库完成后,每个拉取请求都会反映更新的分支,并重新触发 CI 检查。
注意
不会对服务器端存储库创建的提交进行签名。**** 如果存储库需要签名的提交,请从GitHub CLI中gh stack rebase重新设置其基础,使提交遵循本地 Git 提交签名配置,然后推送。gh stack push
重组堆栈
你可能想要更改堆栈的构成。 例如,如果需要删除分支、合并分支、插入分支、重新排序或重命名,请使用交互式命令 gh stack modify。
在运行 gh stack modify之前,请确保满足以下条件:
- 已签出活动堆栈。
- 工作树干净。
- 没有正在进行的重新基。
- 没有请求请求排队进行合并。
- 提交历史记录是线性的。
-
打开修改终端 UI。
Shell gh stack modify
gh stack modify -
选择分支并暂存操作。 在同一会话中不能混合重新排序和结构更改(drop、fold、insert、rename)。
x— 删除分支及其提交d— 将分支折叠到下面的分支中u— 将分支折叠到其上方的分支中i/I— 在光标下方或上方插入新分支r— 重命名分支- 转变+→ / 转变+</kbd> — 对分支重新排序
z— 撤消最后一个暂存操作
-
通过保存应用暂存更改。 保存前不会修改任何内容。
使用 ctrl/cmd+s。
如果在应用时发生冲突,请解决此问题并运行
gh stack modify --continue,或运行gh stack modify --abort以还原预修改状态。 -
推送更新的分支并重新创建堆栈 GitHub。
Shell gh stack submit
gh stack submit
从 GitHub 网站取消堆栈
若要从网站解析堆栈,例如重新排序或重新组织堆栈,请使用堆栈上的 Unstack 选项。
取消堆栈会删除堆栈中的 打开、草稿和关闭 拉取请求。 每个分支保留其当前基分支,但不再链接到其他分支,堆栈映射和堆栈合并要求会从它们中消失。
合并拉取请求和排队拉取请求保留在堆栈中。 拉取请求合并或排队进行合并后,作为堆栈的一部分,无法取消堆栈。 仅当其拉取请求均未合并或排队进行合并时,堆栈才会完全解散;否则,它会保留这些拉取请求。
若要在不解散堆栈的情况下重新排序或重构堆栈,请 gh stack modify 改用该命令。 请参阅 重新构建堆栈。
合并后同步本地环境
当堆栈底部的拉取请求合并时,请使用单个同步命令更新本地状态。 若要同时自动修剪合并拉取请求的本地分支,请添加该 --prune 选项。
gh stack sync --prune
gh stack sync --prune
这会提取最新的更改,快速转发中继,将剩余的分支重新基于它,推送更新的分支,并从中同步拉取请求状态 GitHub。
拉取添加到堆栈上的拉取请求 GitHub
如果其他人将拉取请求添加到堆栈上 GitHub, gh stack sync 则提取新分支并将其追加到本地堆栈,使其镜像远程。 自动拉取此类全新远程预更新,因此 gh stack sync 可以安全地在自动化中运行。
解析分散堆栈
当两个堆栈都不是另一个的干净扩展时,本地堆栈和远程堆栈会有所不同,例如,当你在本地添加分支时,将不同的拉取请求添加到同一堆栈上 GitHub。 发生这种情况时, gh stack sync 无法自动合并这两者。 在交互式终端中,它提供了三种选择:
- 使用远程堆栈作为事实来源。 将本地堆栈组合替换为远程,拉取任何缺失的分支。 如果位于分支上,远程堆栈不再包含,则你已移动到最近的幸存分支。 这需要一个干净的工作树,没有未提交的更改。
- 删除堆栈。GitHub 删除堆栈对象 GitHub 并停止同步。拉取请求和本地分支保持不变。 使用
gh stack submit重新创建堆栈,该堆栈还会为尚未提交的任何分支创建拉取请求。 如果要更改其结构,请首先运行gh stack modify。 - 取消。 在不推送分支或更新任何拉取请求的情况下中止同步。
在非交互式终端(如 CI)中,差异中止同步,而无需推送分支或更新拉取请求。 通过取消堆栈和重新创建堆栈来解决此问题。