mcpField
G
glab-stack

glab-stack

github.com/vince-winkintel开发49105 次安装1 天前更新
代码仓库

关于 glab-stack

glab-stack 是实验性的 glab 命令行技能,用于将相互依赖的 Git 分支和提交组织成 GitLab 合并请求栈。它可从修订范围推断层级、调整顺序,并同步分支与合并请求。

主要功能

  1. 01创建和选择栈
  2. 02从 Git 修订推断层级
  3. 03保存和修改栈变更
  4. 04调整层级顺序并变基
  5. 05同步分支与合并请求

适用场景

  1. 01将功能拆分为相互依赖的合并请求
  2. 02从修订范围添加提交到栈
  3. 03为重排后的合并请求变基并调整目标
  4. 04推送栈变更并更新合并请求

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vince-winkintel/gitlab-cli-skills --skill glab-stack

安装后在 Claude Code 中输入/glab-stack确认已加载。

附带文件references/commands.md

详细介绍

glab stack

工作树本地选择

当前选中的堆栈按 Git 工作树分别跟踪。请在准备操作的工作树中选择并检查目标堆栈;在一个工作树中切换堆栈,不会在另一个工作树中选择该堆栈。堆栈数据和仓库引用仍可能共享,因此仍需检查有破坏性或会发布内容的操作。

概览

堆栈是一系列相互依赖的小型合并请求,用于交付一项功能。在本地,每个差异都是一个独立分支上的提交,并基于前一个差异的分支。同步会创建一个以此前一个分支为目标的 MR;第一个差异则以基础分支为目标。

无论当前检出的分支是什么,堆栈命令都会操作最近创建或切换到的堆栈。执行变更前请检查当前活动堆栈。此功能仍处于实验阶段。完整且经过校验和验证的父命令与子命令帮助(包括当前术语和示例)请参阅 references/commands.md。

快速入门

glab stack --help

当前行为

生成的堆栈分支使用 {branch_prefix}-{stack-title}-{hash}。如果未设置 branch_prefix,glab 会使用操作系统账户用户名(并移除 Windows 域前缀);只有在无法获取用户名时才回退到 glab-stack。它不会依赖 $USER;如果自动化需要稳定且明确的前缀,请设置 glab config set branch_prefix <value>。

glab stack infer <revision-range> 会根据 Git 修订范围内选定的提交创建或追加堆栈层。该范围的起点必须解析为分支名称,不能是 HEAD~5 这类相对引用,因为基础分支会记录在堆栈元数据中。

# Infer stack layers from commits between main and the current branch
glab stack infer main..HEAD

# Infer from a feature branch that diverged from develop
glab stack infer develop..HEAD

# If no stack is active, create one with a specific name
glab stack infer --name feature-stack main..HEAD

如果有活动堆栈,infer 会向该堆栈追加内容,并忽略 --name。请先检查活动堆栈;若要选择不同的目标位置,再推断无关的工作,请使用 glab stack create 或 glab stack switch。

glab stack sync 支持 --update-base、--assignee、--label、--reviewer、--skip-mr-creation 和 --skip-push。

# Sync stack and rebase onto the latest base branch
glab stack sync --update-base

# Sync/push existing stack work without opening MRs for branches that do not have one yet
glab stack sync --skip-mr-creation

# Fetch and rebase the stack locally without pushing branches or creating MRs
glab stack sync --skip-push

# Sync stack and set MR metadata during submission
glab stack sync --assignee @owner --reviewer @reviewer --label backend

# Multiple reviewers can be repeated or comma-separated
glab stack sync --reviewer user1 --reviewer user2
glab stack sync --reviewer user1,user2

如果基础分支(例如 main)已有更新,且你想在推送前对整个堆栈执行变基,请使用 --update-base。

如果你想推送已修改的堆栈分支并清理已合并的条目,但有意不为尚未创建合并请求的堆栈层打开新合并请求,请使用 --skip-mr-creation。合并请求已关闭的差异会保留在堆栈中。

如果你想在本地获取并对堆栈执行变基,但不推送分支或创建合并请求,请使用 --skip-push。这不是离线模式:glab 仍会从远程服务获取内容,并调用 GitLab API。之后推送前,请检查重写后的本地历史记录。

如果你想让 glab stack sync 在同一步骤中提交堆栈的合并请求,并附带负责人和路由元数据,请使用 --assignee、--reviewer 和 --label。

堆栈同步推送期间,glab 会在运行时将 Git 钩子的输出流式传输到 stdout/stderr。请在自动化日志中保留这些输出:如果 pre-push 钩子失败,错误会作为推送错误返回,而不会被缓冲的输出掩盖。

现在可以不带堆栈名称运行 glab stack switch,以交互方式从所有堆栈中选择。对于非交互式自动化,请传入堆栈名称。

glab stack amend 支持 --reword,可在不暂存文件的情况下仅更新堆栈提交消息。它不能与文件参数或 --all 同时使用;请传入 -m/--message 或 -d/--description,也可以让 glab 打开编辑器。

glab stack amend --reword -m "updated commit message"

glab stack amend 和 glab stack save 支持 --no-verify,可跳过底层 Git 提交的本地 pre-commit 和 commit-msg 钩子。请将其视同 git commit --no-verify:只有在了解被跳过的钩子并有意绕过时才使用。

重新排序与恢复

glab stack reorder 会在编辑器中打开当前堆栈顺序,将每个分支变基到新的父分支上,并在 GitLab 上重新指定移动的合并请求的目标分支。它不会推送分支,但会写入远程,不是试运行;运行前请先批准合并请求的目标变更。检查重写后的历史记录后,运行 glab stack sync,以强制推送变基后的分支。

glab stack reorder

# After resolving a rebase conflict and running git rebase --continue
glab stack reorder --continue

# Restore the original branch order instead
glab stack reorder --abort

重新排序变基过程中不要开始另一项重新排序。请先解决冲突并继续,或中止操作,然后再重试。在自动化日志中保留冲突和变基输出。

删除本地堆栈元数据

# Choose a stack interactively
glab stack delete

# Delete a named stack after confirmation
glab stack delete <stack-name>

# Approved non-interactive deletion
glab stack delete <stack-name> --yes

删除操作只会移除堆栈的本地 stacked-metadata 目录,不会删除分支、提交或合并请求。使用 --yes 前,请确认堆栈名称和仓库;随后确认 $(git rev-parse --git-common-dir)/stacked/ 下已不存在指定目录。此只读检查适用于普通检出和关联工作树;glab stack list 只会列出当前堆栈中的层,无法验证其他堆栈是否已删除。

子命令

  • create:创建并激活新堆栈。
  • switch:选择其他活动堆栈。
  • infer:将 Git 修订范围中的差异添加到活动堆栈;如果没有活动堆栈,则创建一个。
  • save:将更改保存为新差异。
  • amend:将更改保存到现有差异。
  • list:列出活动堆栈中的所有差异。
  • first:移动到第一个差异。
  • last:移动到最后一个差异。
  • next:移动到下一个差异。
  • prev:移动到上一个差异。
  • move:移动到指定差异。
  • reorder:对重新排序后的差异进行变基,并在 GitLab 上重新指定已移动 MR 的目标分支,但不推送分支。
  • sync:推送堆栈并创建或更新其合并请求,具体受上述跳过标志影响。
  • delete:删除本地堆栈元数据,不删除分支、提交或 MR。

完整的 --help 输出请参阅 references/commands.md。

评论

支持 Markdown