跳转到内容

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 合入 base
    • rebase:把 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}/mergePUT返回 MergePullResponse { merged, message, sha }

另请参阅

Released under the MIT License.