glab 快捷操作
通过 glab CLI 使用 GitLab 快捷操作(斜杠命令),在单个 API 调用中批量更改多项状态。
快速开始
# Post a single quick action on an issue
glab issue note 123 -m "/assign @alice"
# Batch multiple quick actions in one comment
glab issue note 123 -m "/assign @alice
/label ~bug ~priority::high
/milestone %\"Sprint 5\""
# Post quick actions on a merge request
glab mr note 456 -m "/assign_reviewer @bob
/label ~needs-review
/estimate 2h"
核心概念:通过 CLI 批量处理
虽然 glab 提供了许多单项操作的原生命令(glab issue update、glab mr update 等),但通过 glab issue note 或 glab mr note 发布快捷操作,可以在单个 API 调用中原子性地批量更改多项状态。
# Native commands — 3 separate API calls
glab issue update 123 --assignee @alice
glab issue update 123 --label bug,priority::high
glab issue update 123 --milestone "Sprint 5"
# Quick actions — 1 API call, same result
glab issue note 123 -m "/assign @alice
/label ~bug ~priority::high
/milestone %\"Sprint 5\""
适合批量处理的场景:
- 对单个 issue/MR 应用 3 项或更多更改
- 为多个事项编写分流工作流脚本
- 触发
glab update 标志未提供的操作(例如,/spend、/epic、/promote_to)
语法规则
| 规则 | 详情 |
|---|
| 前缀 | 每个快捷操作都以 / 开头 |
| 大小写 | 不区分大小写(/Assign = /assign) |
| 位置 | 每行一条命令;可出现在评论/描述的任意位置 |
| 参数 | 在命令名称后用空格分隔 |
| 标签 | 添加 ~ 前缀(例如,~bug、~"priority::high") |
| 里程碑 | 添加 % 前缀(例如,%"Sprint 5") |
| 用户 | 添加 @ 前缀(例如,@alice、@me) |
| MR/Issue 引用 | 同一项目内添加 # 前缀,跨项目使用 group/project#IID |
| Epic | 添加 & 前缀(例如,&42) |
| 引号 | 多词值需加引号:~"priority::high"、%"Sprint 5" |
| 忽略文本 | 非快捷操作行将作为普通评论文本发布 |
Issue 快捷操作
分配
| 命令 | 参数 | 描述 |
|---|
/assign | @user [@user2 ...] | 分配一个或多个用户 |
/unassign | @user [@user2 ...] 或不填 | 移除指定受指派人或清空所有人 |
/reassign | @user [@user2 ...] | 将所有受指派人替换为指定用户 |
glab issue note 123 -m "/assign @alice @bob"
glab issue note 123 -m "/reassign @charlie"
glab issue note 123 -m "/unassign"
标签
| 命令 | 参数 | 描述 |
|---|
/label | ~label1 ~label2 ... | 添加标签 |
/unlabel | ~label1 ... 或不填 | 移除指定标签或清空所有标签 |
/relabel | ~label1 ... | 将所有标签替换为指定标签 |
glab issue note 123 -m "/label ~bug ~\"priority::high\""
glab issue note 123 -m "/relabel ~\"type::feature\""
glab issue note 123 -m "/unlabel ~needs-triage"
里程碑与排期
| 命令 | 参数 | 描述 |
|---|
/milestone | %milestone | 设置里程碑 |
/remove_milestone | — | 移除里程碑 |
/due | <date> | 设置截止日期(YYYY-MM-DD、tomorrow、next week) |
/remove_due_date | — | 移除截止日期 |
glab issue note 123 -m "/milestone %\"Sprint 5\""
glab issue note 123 -m "/due 2024-03-31"
glab issue note 123 -m "/due next week"
时间跟踪
| 命令 | 参数 | 描述 |
|---|
/estimate | <time> | 设置预估时间(例如,1h30m、3d) |
/remove_estimate | — | 移除预估时间 |
/spend | <time> [<date>] | 记录耗时(例如,2h;使用 -30m 扣减) |
/remove_time_spent | — | 移除所有已记录的耗时 |
glab issue note 123 -m "/estimate 4h"
glab issue note 123 -m "/spend 1h30m 2024-03-15"
glab issue note 123 -m "/spend -30m"
状态更改
| 命令 | 参数 | 描述 |
|---|
/close | — | 关闭 issue |
/reopen | — | 重新打开已关闭的 issue |
/confidential | — | 将 issue 设为机密 |
/done | — | 标记为已完成(用于待办事项) |
/todo | — | 添加到你的待办列表 |
glab issue note 123 -m "/close"
glab issue note 123 -m "/reopen"
关联关系
| 命令 | 参数 | 描述 |
|---|
/duplicate | #issue | 标记为另一个 issue 的重复项 |
/relate | #issue [#issue2 ...] | 添加相关 issue 链接 |
/blocks | #issue [#issue2 ...] | 此 issue 阻塞其他 issue |
/blocked_by | #issue [#issue2 ...] | 此 issue 被其他 issue 阻塞 |
/unrelate | #issue | 移除与另一个 issue 的关联 |
glab issue note 123 -m "/duplicate #456"
glab issue note 123 -m "/relate #789 #790"
glab issue note 123 -m "/blocks #800"
规划与层级
| 命令 | 参数 | 描述 |
|---|
/epic | &epic or group&epic | 添加到史诗 |
/remove_epic | — | 从史诗中移除 |
/iteration | *iteration:"name" | 设置迭代/冲刺 |
/remove_iteration | — | 移除迭代 |
/weight | <number> | 设置议题权重 |
/clear_weight | — | 清除议题权重 |
/health_status | on_track, needs_attention, at_risk | 设置健康状态 |
/clear_health_status | — | 移除健康状态 |
/board_move | ~list-label | 将议题移至看板列表 |
glab issue note 123 -m "/epic &42"
glab issue note 123 -m "/iteration *iteration:\"Sprint 7\""
glab issue note 123 -m "/weight 3"
glab issue note 123 -m "/health_status on_track"
高级
| 命令 | 参数 | 描述 |
|---|
/copy_metadata | #issue or !mr | 从其他项目复制标签和里程碑 |
/clone | [path/to/project] | 将议题克隆到其他项目 |
/move | path/to/project | 将议题移至其他项目 |
/create_merge_request | [branch-name] | 根据此议题创建 MR |
/promote_to | incident or epic | 将议题提升为其他类型 |
glab issue note 123 -m "/copy_metadata #456"
glab issue note 123 -m "/move group/other-project"
glab issue note 123 -m "/create_merge_request 123-my-feature"
glab issue note 123 -m "/promote_to incident"
MR 快捷操作
审批
| 命令 | 参数 | 描述 |
|---|
/approve | — | 批准 MR |
/unapprove | — | 撤销你的批准 |
glab mr note 456 -m "/approve"
分配
| 命令 | 参数 | 描述 |
|---|
/assign | @user [@user2 ...] | 将 MR 分配给一位或多位用户 |
/unassign | @user ... or none | 移除受分配人 |
/reassign | @user ... | 替换所有受分配人 |
/assign_reviewer | @user [@user2 ...] | 添加审阅者 |
/unassign_reviewer | @user ... or none | 移除审阅者 |
/reassign_reviewer | @user ... | 替换所有审阅者 |
/request_review | @user [@user2 ...] | 请求一位或多位用户进行审阅 |
glab mr note 456 -m "/assign_reviewer @alice @bob
/label ~needs-review"
标签与里程碑
| 命令 | 参数 | 描述 |
|---|
/label | ~label1 ... | 添加标签 |
/unlabel | ~label1 ... or none | 移除标签 |
/relabel | ~label1 ... | 替换所有标签 |
/milestone | %milestone | 设置里程碑 |
/remove_milestone | — | 移除里程碑 |
时间跟踪
| 命令 | 参数 | 描述 |
|---|
/estimate | <time> | 设置时间预估 |
/remove_estimate | — | 移除时间预估 |
/spend | <time> [<date>] | 记录已花费时间 |
/remove_time_spent | — | 移除所有已花费时间 |
合并控制
| 命令 | 参数 | 描述 |
|---|
/merge | — | 在流水线成功后合并 |
/draft | — | 将 MR 标记为草稿 |
/ready | — | 将 MR 标记为可供审阅 |
/rebase | — | 将源分支变基到目标分支 |
/squash | — | 启用合并时压缩提交 |
/target_branch | <branch> | 更改目标分支 |
glab mr note 456 -m "/approve
/merge"
glab mr note 456 -m "/draft"
glab mr note 456 -m "/ready
/assign_reviewer @lead"
状态与其他
| 命令 | 参数 | 描述 |
|---|
/close | — | 关闭 MR |
/reopen | — | 重新打开已关闭的 MR |
/copy_metadata | #issue or !mr | 从其他项目复制标签和里程碑 |
/react | :emoji: | 添加表情回应 |
/title | <new title> | 更改 MR 标题 |
/todo | — | 添加到你的待办列表 |
/done | — | 将待办标记为已完成 |
/subscribe | — | 订阅 MR 通知 |
/unsubscribe | — | 取消订阅 MR 通知 |
/relate | #issue [#issue2 ...] | 添加相关议题链接 |
/blocks | #issue [#issue2 ...] | 此 MR 阻止相关议题 |
/blocked_by | #issue [#issue2 ...] | 此 MR 被相关议题阻止 |
何时使用快速操作,何时使用原生 glab 命令
| 场景 | 建议方式 |
|---|
| 更新单个字段 | glab issue update / glab mr update(显式指定标志) |
| 一次进行 3 项或更多更改 | 在一条评论中批量使用快速操作 |
update 标志中没有对应操作 | 使用快速操作(例如 /spend、/epic、/promote_to、/rebase) |
| 通过脚本对许多条目进行分类 | 使用 glab issue note 快速操作循环处理 |
| 需要标志自动补全 | 使用原生 glab update 命令 |
| 需要通过评论保留审计记录 | 使用快速操作(会显示在活动动态中) |
| 原子地批准并合并 | 在同一条评论中先用 /approve,再用 /merge |
决策指南
Do you need to update a single field?
├─ Yes → Use native glab command (e.g., glab issue update --label)
│
├─ No, multiple fields at once?
│ ├─ 2-3 fields supported by --flags → native glab update
│ └─ 3+ fields OR unsupported fields → quick actions batch
│
└─ Is the action not available in glab update?
└─ Yes → Quick actions only (e.g., /spend, /epic, /promote_to, /rebase, /merge)
自动化示例
分类脚本:一次性添加标签、指派负责人并设置里程碑
#!/usr/bin/env bash
# triage-issues.sh — apply triage metadata to a list of issue IDs
# Usage: ./triage-issues.sh 123 456 789
ASSIGNEE="${ASSIGNEE:-@me}"
LABEL="${LABEL:-~needs-triage}"
MILESTONE="${MILESTONE:-%\"Sprint 5\"}"
for IID in "$@"; do
glab issue note "$IID" -m "/assign $ASSIGNEE
/label $LABEL
/milestone $MILESTONE"
echo "Triaged #$IID"
done
批量关闭过时议题
#!/usr/bin/env bash
# close-stale.sh — close all issues with label ~stale
glab issue list --label stale --state opened --output json \
| jq -r '.[].iid' \
| while read -r IID; do
glab issue note "$IID" -m "/close
/unlabel ~stale"
echo "Closed #$IID"
done
将 MR 标记为可供审查并指派审查者
#!/usr/bin/env bash
# ready-for-review.sh — mark current branch MR ready and request review
MR_IID=$(glab mr list --source-branch "$(git branch --show-current)" --output json | jq -r '.[0].iid')
glab mr note "$MR_IID" -m "/ready
/assign_reviewer @team-lead
/label ~needs-review"
echo "MR !$MR_IID marked ready"
时间跟踪:通过 CLI 记录已花费的时间
#!/usr/bin/env bash
# log-time.sh — log time spent on an issue
# Usage: ./log-time.sh 123 2h30m "2024-03-15"
IID="$1"
TIME="$2"
DATE="${3:-}"
if [[ -n "$DATE" ]]; then
glab issue note "$IID" -m "/spend $TIME $DATE"
else
glab issue note "$IID" -m "/spend $TIME"
fi
echo "Logged $TIME on #$IID"
Sprint 轮换:将议题移至下一个里程碑
#!/usr/bin/env bash
# rotate-sprint.sh — move open issues from one milestone to the next
OLD_MILESTONE="Sprint 5"
NEW_MILESTONE="Sprint 6"
glab issue list --milestone "$OLD_MILESTONE" --state opened --output json \
| jq -r '.[].iid' \
| while read -r IID; do
glab issue note "$IID" -m "/milestone %\"$NEW_MILESTONE\""
echo "Moved #$IID to $NEW_MILESTONE"
done
批准并将合并加入队列
# Approve an MR and queue it to merge when pipeline passes
glab mr note 456 -m "/approve
/merge"
说明与限制
- 需要特定权限的快速操作(例如
/merge、/approve)会在你缺少相应角色时静默失败。
/merge 会将 MR 加入合并队列,待流水线成功后再合并;它不会立即强制合并。
- 议题/MR 描述中的快速操作会在创建和编辑时处理。
- 部分快速操作仅适用于特定 GitLab 版本层级(例如,
/epic、/iteration、/weight、/health_status 需要 GitLab Premium 或 Ultimate)。
- 作为评论发布的快速操作之后无法编辑;如有需要,请发布更正评论。
glab CLI 在发布前不会验证快速操作语法;请检查用户名或标签名是否有拼写错误。
相关子技能
glab-issue — 原生议题创建/更新/关闭命令
glab-mr — 原生 MR 创建/更新/批准/合并命令
glab-label — 使用 /label 前管理标签
glab-milestone — 使用 /milestone 前管理里程碑
glab-iteration — 使用 /iteration 前管理迭代
参考资料