用途
create-pr 用于从当前仓库中已有的工作内容自动创建 GitHub Pull Request。它覆盖从环境检查、分支与提交处理、同步上游、推送,到生成 PR 内容并创建的完整流程。
主要能力
- 前置检查:验证当前是否在 git 仓库中、gh CLI 是否可用并完成认证,并记录当前工作树状态。
- 仓库配置检测:获取全部远程、当前分支名、默认分支(main 或 master)以及仓库信息(owner、name、isFork、parent)。
- fork 工作流识别:根据远程 URL 判断哪些远程属于当前用户,区分上游远程与 fork 远程,并据此确定推送远程与 PR 目标仓库。
- 自动分支与提交:若当前处于默认分支,自动生成并创建功能分支;若工作树有改动,自动暂存并提交,生成简洁的提交信息。
- 同步与 rebase:从上游拉取默认分支并将当前分支 rebase 到上游最新默认分支,rebase 失败时提示用户手动处理并中止。
- 推送分支:分支不存在时使用 -u 推送并建立跟踪;分支已存在时使用 --force-with-lease 安全强推。
- PR 内容生成:收集提交、diff 摘要、完整 diff 与变更文件列表;检查常见位置的 PR 模板并填充;无模板时生成结构化描述(Summary、Changes、Testing 等)。
- 创建 PR:fork 情况下向父仓库创建 PR,非 fork 情况下在同一仓库创建;支持草稿、指定审阅人、标签、关联 issue 等选项。
- 结果报告:输出 PR 编号、标题、URL、base/head 分支、推送远程、变更文件及后续步骤。
- 错误处理:针对无新提交、分支名冲突、提交失败、rebase 冲突、推送被拒、PR 已存在、无远程访问、fork 检测失败等情况给出对应处理方式。
使用方式
用户可选择提供目标基础分支(默认 main/master)、草稿模式标记、指定审阅人。技能按以下步骤执行:检测仓库配置、识别上游与 fork 远程、创建功能分支并提交改动、同步并 rebase 到上游默认分支、推送分支、收集 PR 内容信息、检查 PR 模板、生成标题与描述、创建 Pull Request、报告结果。
常用命令包括:
# 前置检查
git rev-parse --is-inside-work-tree
gh auth status
git status --porcelain
# 获取默认分支
gh repo view --json defaultBranchRef -q '.defaultBranchRef.name'
# 推送分支
git push -u $FORK_REMOTE $CURRENT_BRANCH
git push --force-with-lease $FORK_REMOTE $CURRENT_BRANCH
# 创建 PR
gh pr create --title "$PR_TITLE" --body "$PR_BODY"
# 高级选项
gh pr create --draft --title "$PR_TITLE" --body "$PR_BODY"
gh pr create --reviewer "user1,user2" --title "$PR_TITLE" --body "$PR_BODY"
gh pr create --label "enhancement,needs-review" --title "$PR_TITLE" --body "$PR_BODY"
适用场景
- 需要将当前分支上的工作快速整理为 GitHub Pull Request。
- 需要在 fork 工作流中向父仓库提交 PR。
- 项目包含 PR 模板,希望自动按模板填写描述。
- 希望自动完成创建分支、提交、rebase 与推送等重复步骤。
限制
- 运行前必须位于 git 仓库中,且 gh CLI 可用并已认证,否则停止并提示。
- rebase 出现冲突时无法自动解决,会中止并提示用户手动处理。
- 推送被拒、无远程访问、fork 关系无法判断等情况会报错并提示相应处理方式。
- 提交时不应包含编辑器产物、生成的密钥、凭据或无关文件。
- 推送安全策略规定使用 --force-with-lease,不使用 --force。
- 若项目使用 conventional commits,标题需遵循相应格式,且标题应控制在 72 个字符以内。
注意事项
- 技能不会要求用户自行选择分支名、切换分支、提供提交信息或自行提交,这些操作在流程中自动完成。
- 创建 PR 前会展示生成的标题与描述供用户确认。
- 会保留提交信息中的 issue 引用(如 Fixes #123)并加入到 PR 正文。