pull-request · git:20260919.361331b · 2026-09-19 · sha256 921c786add9dc978

pull-request git:20260919.361331bA

Immutable. This exact content never changes and is served at /api/v1/blob/921c786add9dc978.

---
name: pull-request
description: 创建 GitHub PR、更新标题或正文、填写 PR 模板,或准备人工发布内容时使用;不用于代码审查和 CI 修复。
compatibility: 需要 git。远程创建或更新需要网络访问,以及可用的 GitHub 连接器或已认证的 gh CLI。
---

# 创建或更新拉取请求

依据真实分支、差异、提交、验证结果、关联工作和仓库模板,准备准确且便于评审的 PR。不依赖特定 AI 客户端或插件。

## 能力路由

检查当前客户端实际可用的工具,不预设后端:

1. 可用的 GitHub 连接器支持所需读写操作时,使用连接器。
2. 否则使用已认证的 `gh` CLI。
3. 两者均无法执行远程写入时,生成完整标题、正文、基准分支和来源分支信息,以及准确的人工后续步骤。不要声称 PR 已修改。

回退取决于工具能力,不意味着降低内容检查要求。不要仅为了使用本技能就要求用户安装特定插件。

## 范围

适用于:

- 创建普通 PR 或草稿 PR;
- 更新现有 PR 的标题或正文;
- 填写或修复仓库 PR 模板;
- 无法远程写入时,生成可直接发布的 PR 内容。

不用于创建提交、代码审查、修复 CI 或实现代码改动。

## 收集证据

始终先检查本地仓库:

```bash
git rev-parse --git-dir
git status --short
git branch --show-current
git remote -v
git log --oneline -10
```

然后使用选定的 GitHub 工具,确认当前分支是否已有 PR,并读取编号、URL、基准分支、来源分支、标题、正文和状态。远程元数据不可用时,说明限制,不推测任何影响发布的信息。

根据现有 PR、用户明确输入或目标仓库默认分支确定基准分支,不要硬编码 `main`。条件允许时获取选定基准分支,再检查:

```bash
git log <base-remote>/<base-branch>..HEAD --oneline --no-decorate
git diff <base-remote>/<base-branch>...HEAD --stat
git diff <base-remote>/<base-branch>...HEAD
```

起草或修改标题和正文前,阅读 [PR 内容规则](references/pr-content.md)。

## 可评审性

准备 PR 时检查:

- TL;DR、风险、验证入口和 reviewer 关注点是否与实际 diff 一致;不要用泛化描述掩盖未验证的行为。
- 将核心逻辑、机械重命名、生成文件和格式化变更分开说明;如果改动过大,优先拆分而不是靠正文解释降低评审成本。
- 说明迁移顺序、rollout/回滚条件、兼容性影响和未覆盖场景;每个关键结论都指向 commit、测试、日志或运行面证据。
- 只有用户明确授权时才改写历史或 force-push。改写前记录原始 tree,改写后确认目标 tree 未发生意外变化。

## 流程

### 创建

1. 确认存在有意义的已提交差异,并确定基准分支和来源分支。
2. 来源分支已有 PR 时复用该 PR,不重复创建;先核验其 head 是否包含本次目标提交,不能把旧的远端状态直接当作本次交付结果。
3. 根据证据编写标题和正文,并保留仓库模板。
4. 当前会话已有对目标分支的明确推送授权时,核对远端差异并推送所需提交,远端分支已存在不阻止已授权的更新。没有明确推送授权时,仅保留“用户请求创建 PR 且远程尚无该分支”这一首次发布例外;不得据此更新已有远端分支。缺少必要授权时先准备完整内容,只暂停依赖该推送的步骤。
5. 通过选定工具创建 PR;已有 PR 则按更新流程处理当前授权范围内的内容。只有用户要求草稿或改动明确尚未准备好评审时,才使用草稿状态。
6. 重新读取创建或复用的 PR,验证编号、URL、基准分支、来源分支、标题、正文和草稿状态,并确认 head 是否包含本次目标提交;未发布的提交须明确报告。

### 更新

1. 读取现有 PR 和当前差异,不根据过期的本地假设重写。
2. 保留仍有效的上下文、模板章节、问题链接、迁移说明和评审指引。
3. 只修改用户要求或有证据表明已过期的内容。
4. 通过选定工具更新,再重新读取 PR,验证最终标题和正文。

### 无远程写入能力

返回:

- 已确认或明确标记为未验证的基准分支和来源分支;
- 最终标题;
- 完整正文,而非摘要;
- 是否使用了模板;
- 若 `gh` 可用于人工操作,提供准确的 `gh pr create` 或 `gh pr edit` 命令;否则提供简洁的 GitHub 界面操作说明;
- “远程更新:未执行”。

## 安全与准确性

- 不编造测试、问题链接、迁移状态、评审者或部署结果。
- 不隐瞒破坏性变更、配置变化、已知风险或无关差异。
- 不重复创建 PR,也不悄悄更改基准分支。
- 不用 PR 措辞掩盖过大或不自洽的改动;评审难度受到明显影响时,建议拆分。
- 生成标题和正文不代表远程已经更新。报告实际使用的后端和重新读取的结果。

## 输出

```text
操作:已创建 / 已更新 / 仅准备内容
PR:#<number> <url> / 未创建
基准分支:<base>
来源分支:<来源分支版本>
后端:连接器 / gh / 无
模板:已使用 / 未找到
验证:<重新读取的结果或限制>
```