mcpField
O
open-pr

open-pr

github.com/clhbid开发0481 次安装3 天前更新
代码仓库

关于 open-pr

open-pr 是面向使用 GitHub CLI 的贡献者的技能,用于创建或更新拉取请求。它涵盖分支与问题核对、正文准备、提交及关联检查。

主要功能

  1. 01查找 PR 的目标分支
  2. 02解析跨仓库关联问题
  3. 03检查改动和差异规模
  4. 04创建或更新 PR
  5. 05验证关闭引用

适用场景

  1. 01为问题分支创建 PR
  2. 02代码变更后更新现有 PR
  3. 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 永远不会建立关联。

评论

支持 Markdown