github-pr-workflow
SKILL.md
GitHub PR 工作流自动化
概述
该技能用于自动化 GitHub PR 的完整工作流: 注意:无需关心当前分支是否还存在未提交的更改,但请确保当前分支已推送到远程仓库。
- 如果用户已在提示词中指明提交的 title,则使用用户提供的
- 如果没有则使用最近一次 git commit 的信息作为 PR 标题和描述
- 基于当前分支创建 PR
- 检查是否存在合并冲突
- 自动合并(squash 模式)或提示用户处理冲突
前置要求
- Windows 系统(PowerShell 5.0+)
- git 已安装
- GitHub CLI (
gh) - 脚本会自动检测并提示安装 - 已登录 GitHub - 脚本会自动检测并提示登录
- 用户已在当前分支上进行了提交并推送到远程仓库
工作流程
1. 自动检测 GitHub CLI
如果未安装 gh 命令,脚本会提示用户选择安装方式:
- winget - Windows 包管理器(推荐)
- Scoop - 另一个包管理工具
- 手动下载 - 访问官网下载安装程序
2. 自动检测 GitHub 登录状态
如果未登录 GitHub,脚本会:
- 提示用户确认是否登录
- 自动运行
gh auth login - 等待用户在浏览器完成认证
- 认证成功后继续执行工作流
3. 获取用户输入
脚本支持两种方式获取 PR 信息:
方式一:命令行参数传入(推荐)
优先使用该方法,如果用户提示词没说title 应该是什么,自动使用最近一次 git log -1 的提交信息
.\Invoke-GitHubPRWorkflow.ps1 -Title "PR标题" -Message "PR描述"
方式二:交互式输入
- PR 标题:简洁描述本次提交内容
- Commit Message:详细的提交信息
- 输入多行内容,每行回车继续
- 输入
END(不区分大小写)结束输入 - 如果未输入任何内容,会自动使用最近一次
git log -1的提交信息
4. 创建 PR
执行步骤:
# 1. 获取当前分支名
$branch = (git rev-parse --abbrev-ref HEAD)
# 2. 获取目标分支(通常是 main 或 master)
$baseBranch = (git remote show origin | grep "HEAD branch" | awk '{print $NF}')
# 3. 使用 gh pr create 创建 PR
gh pr create --title "$title" --body "$message" --base $baseBranch
5. 检查冲突
执行步骤:
# 获取 PR 编号
$prNumber = gh pr list --state open --head $branch --json number --jq '.[0].number'
# 检查合并状态
$prStatus = gh pr view $prNumber --json mergeable --jq '.mergeable'
# 如果 mergeable 为 false,表示有冲突
if ($prStatus -eq "false") {
Write-Host "❌ 检测到合并冲突,请手动解决后再合并" -ForegroundColor Red
exit 1
}
6. 合并 PR
执行步骤:
# 使用 squash 模式合并
gh pr merge $prNumber --squash --auto
# 或手动合并
gh pr merge $prNumber --squash --delete-branch
命令使用示例
# 从任意位置调用脚本(推荐方式)
c:\Users\housei\.claude\skills\github-pr-workflow\scripts\Invoke-GitHubPRWorkflow.ps1 -ProjectPath "D:\Projects\MyProject" -Title "修复了登录问题" -Message "修复了登录问题"
# 禁用自动合并,仅创建 PR
.\Invoke-GitHubPRWorkflow.ps1 -ProjectPath "D:\Projects\MyProject" -AutoMerge:$false
# 指定目标分支
.\Invoke-GitHubPRWorkflow.ps1 -ProjectPath "D:\Projects\MyProject" -BaseBranch "develop"
# 在项目根目录直接运行(无需指定路径)
.\Invoke-GitHubPRWorkflow.ps1
关键参数说明
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
ProjectPath |
string | 项目根目录路径(可从任意位置调用脚本) | 当前目录 |
Title |
string | PR 标题(不指定则交互输入) | 交互输入 |
Message |
string | PR 描述(不指定则交互输入或使用 git log) | 交互输入/自动 |
BaseBranch |
string | 目标分支 | 自动检测 |
AutoMerge |
switch | 是否自动合并 PR | $true |
mergeMode |
内置 | 合并模式 | --squash |
deleteAfter |
内置 | 合并后删除分支 | true |
错误处理
| 场景 | 处理方式 |
|---|---|
| 未安装 GitHub CLI | 提示安装,提供多种安装方式供选择,用户选择后自动安装 |
| 未登录 GitHub | 提示登录,自动运行 gh auth login,等待用户完成认证 |
| 未在 git 仓库中 | 停止流程,提示当前目录不是 git 仓库 |
| PR 创建失败 | 显示错误信息,停止流程 |
| 检测到合并冲突 | 停止合并,提示用户手动解决 |
| PR 已被合并 | 提示 PR 状态已改变 |
| 合并失败 | 显示错误原因,停止流程 |
注意事项
- ✅ 脚本可从任意位置调用,使用
-ProjectPath指定项目路径 - ✅ 支持命令行参数传入 PR 标题和描述,无需交互输入
- ✅ 执行前确认当前分支已推送到远程
- ✅ 确保有足够的权限创建和合并 PR
- ✅ 如果有冲突,需要本地解决后再重新推送
- ✅ 脚本已自动设置 UTF-8 编码,支持中文标题和描述
- ❌ 不要在保护分支上直接推送(应通过 PR)
- ❌ 避免在多人协作的分支上自动合并未经审查的 PR
常见问题
Q: 如何从任意位置调用脚本,而不需要复制到项目根目录?
# 使用 -ProjectPath 参数指定项目路径
c:\Users\housei\.claude\skills\github-pr-workflow\scripts\Invoke-GitHubPRWorkflow.ps1 -ProjectPath "D:\path\to\project"
Q: 如何指定目标分支而不是自动检测?
# 使用 -BaseBranch 参数
.\Invoke-GitHubPRWorkflow.ps1 -BaseBranch "develop"
Q: 如何禁用自动合并,仅创建 PR?
# 使用 -AutoMerge:$false 参数
.\Invoke-GitHubPRWorkflow.ps1 -AutoMerge:$false
Q: 如何跳过交互输入,直接传入 PR 标题和描述?
# 使用 -Title 和 -Message 参数
.\Invoke-GitHubPRWorkflow.ps1 -Title "修复bug" -Message "修复了登录问题"
Q: 交互输入时,如何输入多行描述?
# 每行回车继续,输入 END(不区分大小写)结束
Commit Message (按 Enter 后输入,输入 'END' 后回车结束):
第一行描述
第二行描述
END
Q: 如果忘记输入描述,会发生什么?
# 脚本会自动使用最近一次 git commit 的信息作为 PR 描述
Q: 遇到冲突后如何继续合并?
# 本地解决冲突
git pull origin main # 或你的目标分支
# 解决冲突文件后
git add .
git commit --amend --no-edit
git push --force
# 重新运行工作流
Q: 如何解决中文乱码问题?
# 脚本已自动设置 UTF-8 编码,如果仍有问题,可手动执行:
chcp 65001
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
集成建议
- 与 CI/CD 流程集成:确保 PR 通过测试后再合并
- 添加审核步骤:在自动合并前等待指定人员审查
- 日志记录:记录所有 PR 的创建和合并日志
- 团队规范:制定 PR 标题和 commit message 的规范
Weekly Installs
7
Repository
sakumyz/skillsFirst Seen
Feb 20, 2026
Security Audits
Installed on
opencode7
gemini-cli7
antigravity7
claude-code7
github-copilot7
codex7