关于 create-pull-request
指导 GitHub Pull Request 创建流程的技能,适用于需要按项目约定提交 PR 的开发者。它涵盖 CLI、分支和提交检查、信息收集,并要求使用仓库中的 PR 模板。
主要功能
- 01检查 gh 安装与认证状态
- 02检查工作区和当前分支
- 03梳理提交、差异与基准分支
- 04收集 PR 所需信息
- 05按模板生成 PR 描述
- 06使用 gh CLI 创建 PR
适用场景
- 01为功能分支创建 GitHub PR
- 02在提交前检查分支与工作区状态
- 03依据提交记录整理 PR 描述
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cline/ cline --skill create-pull-request安装后在 Claude Code 中输入/create-pull-request确认已加载。
详细介绍
创建拉取请求
本技能将指导你创建结构完善、符合项目惯例和最佳实践的 GitHub 拉取请求。
前置条件检查
继续之前,请确认以下事项:
1. 检查是否已安装 gh CLI
gh --version
如果尚未安装,请告知用户:
需要 GitHub CLI(
gh),但尚未安装。请安装:
- macOS:
brew install gh- 其他系统:https://cli.github.com/
2. 检查是否已通过 GitHub 身份验证
gh auth status
如果尚未通过身份验证,请指导用户运行 gh auth login。
3. 确认工作目录干净
git status
如果存在未提交的更改,询问用户是否要:
- 将其作为此 PR 的一部分提交
- 暂时将其暂存
- 丢弃这些更改(请谨慎)
收集上下文
1. 确认当前分支
git branch --show-current
确保当前分支不是 main 或 master。如果是,请让用户创建或切换到功能分支。
2. 查找基础分支
git remote show origin | grep "HEAD branch"
通常为 main 或 master。
3. 分析与此 PR 相关的近期提交
git log origin/main..HEAD --oneline --no-decorate
检查这些提交,以了解:
- 引入了哪些更改
- PR 的范围(单个功能/修复,还是多项更改)
- 是否应该压缩或重新整理提交
4. 查看差异
git diff origin/main..HEAD --stat
这会显示哪些文件发生了更改,有助于识别更改类型。
收集信息
创建 PR 之前,需要收集以下信息。检查能否从以下内容中推断出来:
- 提交消息
- 分支名称(例如
fix/issue-123、feature/new-login) - 更改的文件及其内容
如果缺少任何关键信息,请使用 ask_followup_question 询问用户:
必需信息
- 相关问题编号:在提交消息中查找
#123、fixes #123或closes #123等格式 - 描述:此更改解决了什么问题?为什么要进行这些更改?
- 更改类型:缺陷修复、新功能、破坏性更改、重构、外观调整、文档或工作流
- 测试流程:如何进行测试?可能会导致什么问题?
澄清问题示例
如果没有找到问题编号:
我在提交消息或分支名称中找不到相关问题编号。此 PR 要解决哪个 GitHub 问题?(请输入问题编号,例如“123”;如果是小型修复,请输入“N/A”)
Git 最佳实践
创建 PR 之前,请考虑以下最佳实践:
提交规范
- 原子提交:每个提交应只表示一项独立的逻辑更改
- 清晰的提交消息:尽可能遵循约定式提交格式
- 避免合并提交:优先使用变基而非合并,以保持提交历史整洁
分支管理
-
基于最新的 main 进行变基(如有需要):
git fetch origin git rebase origin/main -
酌情压缩提交:如果有许多小型的“WIP”提交,可考虑交互式变基:
git rebase -i origin/main仅当提交看起来杂乱且用户熟悉变基时才建议这样做。
推送更改
确保所有提交均已推送:
git push origin HEAD
如果分支经过变基,可能需要运行:
git push origin HEAD --force-with-lease
创建拉取请求
重要:请阅读并使用 PR 模板 .github/pull_request_template.md。PR 正文格式必须严格符合模板结构。请勿偏离模板格式。
填写模板时:
- 将
#XXXX替换为实际的问题编号;如果不存在相关问题(小型修复),则保留为#XXXX - 根据从提交和上下文中收集的信息填写所有部分
- 勾选相应的“更改类型”复选框
- 完成适用的“预检清单”项目
使用 gh CLI 创建 PR
使用临时文件编写 PR 正文,避免 shell 转义问题、换行问题及其他命令行不稳定情况:
-
将 PR 正文写入临时文件:
/tmp/pr-body.md -
使用该文件创建 PR:
gh pr create --title "PR_TITLE" --body-file /tmp/pr-body.md --base main -
清理临时文件:
rm /tmp/pr-body.md
对于草稿 PR:
gh pr create --title "PR_TITLE" --body-file /tmp/pr-body.md --base main --draft
为什么要使用文件? 直接通过 --body 传递包含换行、特殊字符和复选框的复杂 Markdown 容易出错。--body-file 标志可以可靠地处理所有内容。
创建后
创建 PR 后:
- 显示 PR URL,以便用户查看
- 提醒用户注意 CI 检查:测试和 lint 检查将自动运行
- 建议后续步骤:
- 如有需要,添加评审者:
gh pr edit --add-reviewer USERNAME - 如有需要,添加标签:
gh pr edit --add-label "bug"
- 如有需要,添加评审者:
错误处理
常见问题
-
没有领先于 main 的提交:该分支没有可提交的更改
- 询问用户是否打算在其他分支上工作
-
分支尚未推送:远程仓库中没有该分支
- 先推送分支:
git push -u origin HEAD
- 先推送分支:
-
PR 已存在:此分支已有关联的 PR
- 显示已有的 PR:
gh pr view - 询问用户是否要改为更新该 PR
- 显示已有的 PR:
-
合并冲突:分支与基分支存在冲突
- 指导用户解决冲突或执行变基
总结清单
完成前,请确认:
- 已安装并完成身份验证的
ghCLI - 工作目录干净
- 所有提交均已推送
- 分支已与基分支保持同步
- 已确定相关议题编号,或使用占位符
- PR 描述严格遵循模板
- 已选择适当的更改类型
- 已处理飞行前检查清单中的事项