From spellbook-skills
一键提交并创建合并请求(GitHub Pull Request 或 GitLab Merge Request)。当用户说「创建 PR」「创建 MR」「提交并创建合并请求」「push 并开 PR/MR」「提 PR」「提 MR」「open a pull request」「open a merge request」或类似意图时触发。自动识别 GitHub / GitLab 远端,调用对应的 gh / glab CLI,完成暂存、Conventional Commit、推送、读取仓库内 PR/MR 模板(若存在)、创建并指派合并请求。不适用于:仅本地提交(用 git-commit 技能)、纯推送但不开合并请求、Bitbucket / Gitea 等其他平台。
How this skill is triggered — by the user, by Claude, or both
Slash command
/spellbook-skills:git-merge-requestThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
一键提交并创建合并请求,覆盖 GitHub Pull Request 与 GitLab Merge Request 两种平台。统一识别远端、复用 git-commit 技能完成提交、自动探测仓库内 PR/MR 模板、生成标题与描述、调用对应 CLI 创建并指派。
一键提交并创建合并请求,覆盖 GitHub Pull Request 与 GitLab Merge Request 两种平台。统一识别远端、复用 git-commit 技能完成提交、自动探测仓库内 PR/MR 模板、生成标题与描述、调用对应 CLI 创建并指派。
Core principle: 检测平台 → 复用 git-commit 提交 → 推送 → 仓库模板优先于内置模板 → 用户确认后通过 CLI 创建并指派。
Announce at start: "正在使用 git-merge-request skill 帮你创建合并请求。"
origin 指向 GitHub 或 GitLabgh(用 gh auth status 验证)glab(用 glab auth status 验证)如果检测到平台但对应 CLI 缺失,直接终止并明确告知安装命令,不要静默回退到另一个 CLI:
| 平台 | 安装命令(macOS) |
|---|---|
| GitHub | brew install gh && gh auth login |
| GitLab | brew install glab && glab auth login |
从用户输入中提取下列参数,未指定时使用默认值:
| 参数 | 默认值 | 说明 |
|---|---|---|
| target_branch | 仓库默认分支 | 合并目标分支 |
| assignee | 当前 CLI 登录用户 | 指派人 |
| title | 自动生成 | 合并请求标题,从 commit 历史推导 |
| template | 自动选择 | 多模板时让用户选 |
| -y | false | 跳过确认直接创建 |
读取 git remote get-url origin,按 host 判定平台:
| Host 关键词 | 平台 | CLI |
|---|---|---|
github.com 或自建 GHE 域名 | GitHub | gh |
gitlab.com 或自建 GitLab 域名 | GitLab | glab |
| 其他 | 不支持 | 终止并告知 |
如果是企业自建域名无法明确判断,先看仓库根是否存在 .github/ 或 .gitlab/ 目录辅助判断;仍无法确定时询问用户。
平台判定后,运行对应命令验证 CLI 已认证:
# GitHub
gh auth status
# GitLab
glab auth status
同时查看当前仓库状态与提交风格:
git status
git log --oneline -5
优先调用 git-commit 技能完成提交,避免在本技能里重复实现 commit 流程。git-commit 已经处理:
.env 等敏感文件--emoji 时启用且置于冒号后)[#AI])如果 git-commit 技能不可用,按以下规则手工提交:
git add 已修改 / 新增文件(排除 .env / *.key / credentials* 等敏感文件)git diff --cached 分析变更,生成 Conventional Commit(emoji 仅在仓库 / 用户要求时启用、且置于冒号后,描述用中文)[#AI] 标记git commitgit push origin <current_branch>
若远程分支不存在,使用 git push -u origin <current_branch>。
优先级:用户指定 > 仓库默认分支。
| 平台 | 获取默认分支命令 |
|---|---|
| GitHub | gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' |
| GitLab | git remote show origin | grep 'HEAD branch' | awk '{print $NF}' |
关键:必须 fetch 远程目标分支以确保比较基准最新:
git fetch origin <target_branch>
后续所有比较必须使用 origin/<target_branch> 而非本地 <target_branch>。本地分支可能滞后,会让 diff 与待合并 commit 列表不准确。
优先级:用户指定 > 当前 CLI 登录用户。
| 平台 | 获取当前用户命令 |
|---|---|
| GitHub | gh api user --jq '.login' |
| GitLab | glab auth status 2>&1 | grep 'Logged in' | awk '{print $6}' |
核心规则:仓库内有模板就用仓库的,没有再用内置模板。 团队往往在模板里放了 checklist、签署声明、影响范围说明等约定项,覆盖这些约定会让 review 流程出岔子。
按以下顺序查找模板文件,第一个命中即停:
.github/PULL_REQUEST_TEMPLATE.md.github/pull_request_template.md.github/PULL_REQUEST_TEMPLATE/ 目录下任意 .md 文件(多模板)PULL_REQUEST_TEMPLATE.md / pull_request_template.mddocs/PULL_REQUEST_TEMPLATE.md / docs/pull_request_template.md.gitlab/merge_request_templates/ 目录下任意 .md 文件(多模板).gitlab/merge_request_template.md如果命中的是模板目录且包含多个 .md 文件:
default.md(若存在),否则使用第一个template=<filename> 参数时按指定的来仓库内模板不要原样照搬,而是当作骨架填入生成内容:
<!-- -->、placeholder 占位符## Description / ## 描述 / ## 变更说明 / ## 改动说明 / ## What changed / ## Why / ## 主要改动 等,把生成的「变更概述 / 主要改动」内容替换占位文本填进去- [ ] 项原样,让作者后续手工勾选[#AI] 标记如果没找到任何仓库内模板,退回内置模板:
## 变更概述
<一两句话说明本次变更的目的和背景>
## 主要改动
- <改动点 1>
- <改动点 2>
- ...
[#AI]
分析待合并 commit(必须用 origin/<target_branch> 比较):
git log --oneline origin/<target_branch>..HEAD
若未传 -y,先向用户展示预览,等待确认:
即将创建 <PR 或 MR>:
平台:<GitHub 或 GitLab>
标题:<title>
源分支:<current_branch>
目标分支:<target_branch>
指派人:<assignee>
模板来源:<repo:.github/PULL_REQUEST_TEMPLATE.md 或 builtin>
描述:
<description 内容>
用户确认后(或传了 -y 时直接)执行:
| 平台 | 创建命令 |
|---|---|
| GitHub | gh pr create --base <target_branch> --head <current_branch> --title "<title>" --body "<description>" --assignee <assignee> |
| GitLab | glab mr create --source-branch <current_branch> --target-branch <target_branch> --title "<title>" --description "<description>" --assignee <assignee> --no-editor |
--body / --description 内容用 heredoc 传入以保留换行与 Markdown 格式。
返回合并请求链接,并明确告知:
glab 没装,绝对不要去找 gh 试着创建 —— 会推送到错的地方或直接报错。明确告知缺失并终止main 而非 origin/main 计算待合并 commit,会漏掉队友刚推上来的提交,导致 PR 描述错乱<!-- 请勾选 --> 之类占位整段抹掉,让模板形同虚设。保留 checklist 原样main:很多老仓库默认分支是 master 或 develop,应通过 CLI 查询git-commit 技能,不要在本技能里复制粘贴一份[#AI] 标记位置错放:必须在描述末尾,不要塞进标题里- [ ] 上打勾,那是作者的自我确认动作git-commit 技能 — 提交消息生成与暂存策略,本技能 Phase 3 优先复用npx claudepluginhub yyykf/spellbook-skills --plugin spellbook-skillsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.