cnb-rs pr merge
cnb-rs pr merge <NUMBER> [flags]合并指定的 Pull Request。
选项
<NUMBER>:PR 编号(必填)-t, --commit-title <TITLE>:合并提交标题(必填)-m, --commit-message <MESSAGE>:合并提交信息(默认:空)-M, --merge-style <STYLE>:合并方式(默认merge);使用 ValueEnum 在 clap 层校验取值merge:创建合并 commit,保留全部 head 分支历史squash:把 head 分支压成单个 commit 合入 baserebase:把 head 分支逐 commit rebase 到 base 顶部
注:短选项是
-M(大写)不是-s。后者被pr list --state占用,为避免跨命令语义冲突统一用-M。
继承的全局选项:
--repo <REPO>:指定仓库路径(格式:group/repo)--domain <DOMAIN>:指定目标域名(默认:cnb.cool)
输出约定
- stderr:人类可读的成功提示
✓ 已合并 PR #42(squash, sha=a1b2c3d)。sha 取前 7 位是 git 社区惯例,足以唯一识别 commit - stdout:脚本可消费的完整 PR URL,与
pr create/pr close/pr comment add保持一致 - 失败:合并不成功(冲突 / CI 未过 / PR 已闭 / 不允许 push)时以
anyhow::bail!非零退出,错误信息走 stderr。之前版本会println!并 exit 0 误导脚本
示例
bash
# 默认 merge 方式
$ cnb-rs pr merge 42 -t "Merge PR #42"
✓ 已合并 PR #42(merge, sha=a1b2c3d)
https://cnb.cool/org/repo/-/pulls/42
# squash 合并
$ cnb-rs pr merge 42 -t "feat: 新功能" -M squash
# rebase 合并,附带提交信息
$ cnb-rs pr merge 42 -t "fix: 修复问题" -m "详细说明" -M rebase
# 合并失败(PR 已 closed / 冲突 / CI 未过)
$ cnb-rs pr merge 271 -t "试试"
错误: 合并失败:合并请求已经合入目标分支
$ echo $?
1
# 非法 merge-style 被 clap 拒绝(exit 2)
$ cnb-rs pr merge 42 -t "x" -M invalid
error: invalid value 'invalid' for '--merge-style <MERGE_STYLE>'
[possible values: merge, squash, rebase]API 调用
| 步骤 | API | 方法 | 说明 |
|---|---|---|---|
| 合并 PR | ${API}/repos/{repo}/-/pulls/{n}/merge | PUT | 返回 MergePullResponse { merged, message, sha } |