关于 open-pr
open-pr 是面向使用 GitHub CLI 的贡献者的技能,用于创建或更新拉取请求。它涵盖分支与问题核对、正文准备、提交及关联检查。
主要功能
- 01查找 PR 的目标分支
- 02解析跨仓库关联问题
- 03检查改动和差异规模
- 04创建或更新 PR
- 05验证关闭引用
适用场景
- 01为问题分支创建 PR
- 02代码变更后更新现有 PR
- 03将堆叠式 PR 指向父分支
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ clhbid/ agent-context --skill open-pr安装后在 Claude Code 中输入/open-pr确认已加载。
详细介绍
打开 PR
打开或更新拉取请求。pr 技能负责编写正文;此技能负责其他所有事项。
步骤 1:查找拉取请求及其目标分支
git fetch origin --prune
gh pr view --json number,url,baseRefName
切勿假定目标分支。 与拉取请求的目标分支进行比较:
- 拉取请求已存在: 使用其
baseRefName。在步骤 6b 中更新它。 - 不存在: 使用默认分支(
main或development),通过gh repo view --json defaultBranchRef --jq .defaultBranchRef.name获取;如果当前分支基于前一个切片,则使用前一个切片的 分支。在步骤 6a 中创建拉取请求。
步骤 2:获取议题
从分支名称中解析议题编号。分支名称遵循 {issue_number}-{description} 格式(例如,54-return-to-after-login -> 议题 #54)。
仅凭编号无法确定议题。 议题编号按仓库分别编号,而且议题不一定属于你要从中发起 PR 的仓库——一个仓库中的更改通常是为另一个仓库中跟踪的议题而实现的。先确定仓库,再获取议题;默认使用当前仓库:
# Default to this repo; override when the issue lives elsewhere
ISSUE_REPO="$(gh repo view --json nameWithOwner --jq .nameWithOwner)"
gh issue view <issue_number> --repo "$ISSUE_REPO" --json title,body,url
如果获取到的议题与 diff 中的工作不符,说明你找错了仓库——先询问,不要针对其他人的议题编写 PR 正文。
步骤 3:阅读更改
git status # warn the user about uncommitted changes
git log --oneline "origin/<base>"...HEAD
git diff "origin/<base>"...HEAD
步骤 4:检查规模
git diff --shortstat <base>...HEAD
将其与 issue-tracker 技能中 Decomposing work before Ready for Agent 所述的上限进行比较。如果超出上限,请说明情况,并建议按该技能的方法先简化再拆分。**这绝不会阻止工作继续:**如果作者表示可以合并,就继续。
步骤 5:编写正文
使用 pr 技能编写正文,然后:
- 将任何需要在合并前或合并后执行的任务(“合并前添加环境变量 X”“之后运行迁移 Y”)写入 Merge Danger 的可选描述中。
- 以关闭行结尾:
Closes #<issue_number>;如果拉取请求只完成了议题的一部分,则使用Part of #<issue_number>。如果议题位于另一个仓库,必须注明仓库——使用Closes owner/repo#N;单独的#N会默认为当前仓库中的议题 N,且不会发出提示。
标题格式: {issue_number}: {issue_title},例如 54: Return to after login。
步骤 6a:创建拉取请求
将步骤 5 的正文保存到文件,然后:
git push -u origin HEAD
gh pr create --base "<base>" --title "<issue_number>: <issue_title>" --body-file <body-file>
gh pr edit --add-reviewer <maintainer>
--base 不是可选项。 如果不指定,gh 会将默认分支作为目标,因此基于前一个切片的切片也会在 diff 中显示其父级的更改。
以可供审查的状态打开,并请求审查。 草稿表示本次运行未完成:仅在仓库 AGENTS.md 的 How a run ends 中所述的 Blocked 和 Error 结束状态下使用草稿,此时拉取请求应包含说明所需事项的评论。
步骤 6b:更新拉取请求
git push
gh pr edit --body-file <body-file>
根据完整 diff 重写正文,而不是在现有内容后追加。如果议题标题已更改,使用 gh pr edit --title 更新标题。
步骤 7:检查关联
gh pr view --json baseRefName,closingIssuesReferences
如果拉取请求的目标是默认分支,Closes 行必须出现在 closingIssuesReferences 中;如果没有出现,请修正该行。对于堆叠的拉取请求,在 GitHub 于父级合并后重新指定目标之前,不会显示关联(参见 issue-tracker 中的 A closing reference fires only on a merge into the default branch)——请在报告中说明这一点。Part of 永远不会建立关联。