研发协作
用户明确要求用 gh 一站式提交并创建/更新 GitHub…
当用户明确要求使用 GitHub CLI(`gh`)一次性完成暂存、提交、推送并创建或更新 GitHub PR 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用户明确要求用 gh 一站式提交并创建/特定
解决思路
- 检查 GitHub CLI:运行 `gh --version`;如果缺失,要求用户安装 `gh` 并停止。
- 检查 `gh` 认证:运行 `gh auth status`;如果未认证,要求用户运行 `gh auth login`(并重新运行 `gh auth status`)后再继续。
- 命名约定:从 main/master/default 开始时分支名为 `{description}`;提交信息为简洁的 `{description}`;PR 标题为概括完整 diff 的 `{description}`。
- 创建 PR 前先解析仓库根目录:`repo_root="$(git rev-parse --show-toplevel)"`,并从该根目录查找当前生效的 GitHub PR 模板。
- 按顺序查找模板候选:`.github/pull_request_template.md`;`.github/PULL_REQUEST_TEMPLATE.md`;`.github/pull_request_template/` 下的一个 `*.md` 文件;`.github/PULL_REQUEST_TEMPLATE/` 下的一个 `*.md` 文件。
- 使用从仓库根目录发出的路径,例如 `.github/pull_request_template.md`,而不是 `./.github/pull_request_template.md`。
- 如果恰好找到一个模板,在编写最终 PR body 前读取它,并在 `gh pr create` 时通过 `--template "$template"` 传入。
- 如果找到多个模板文件,在创建 PR 前停止并询问使用哪个模板;如果没有模板,使用本技能给出的 fallback body 结构。
- 如果当前在 main/master/default,创建分支:`git checkout -b "{description}"`;否则留在当前分支。
- 确认状态,然后暂存全部内容:先 `git status -sb`,再 `git add -A`。
- 用 description 简洁提交:`git commit -m "{description}"`。
- 如果尚未运行检查则运行检查;如果因缺少依赖/工具导致检查失败,安装依赖并重新运行一次。
- 带 tracking 推送:`git push -u origin $(git branch --show-current)`。
- 如果 `git push` 因 workflow 认证错误失败,从 master 拉取后重试推送。
- 发现并读取仓库 PR 模板(如有)。
- 检查当前分支是否已有 PR:`gh pr view "$(git branch --show-current)" --json number,isDraft,url`。
- 如果 PR 已存在,就地更新该 PR;不要再创建另一个 PR,也不要改变现有 PR 是 draft 还是 ready for review。
- 如果没有 PR,创建新的 draft PR:有一个模板时运行 `GH_PROMPT_DISABLED=1 GIT_TERMINAL_PROMPT=0 gh pr create --draft --fill --template "$template" --head "$(git branch --show-current)"`;没有模板时运行 `GH_PROMPT_DISABLED=1 GIT_TERMINAL_PROMPT=0 gh pr create --draft --fill --head "$(git branch --show-current)"`。
- 编辑 PR 标题和 body,使其反映 diff 的实际净变更。
- 将 PR 描述写入带真实换行的临时文件,并通过 `--body-file` 或 `gh pr edit --body-file` 传入,避免 `\n` 转义的 markdown。
- 更新本流程早先创建的 PR 时,尽可能从当前分支推断 PR:运行 `git branch --show-current`,再运行 `gh pr view "$(git branch --show-current)" --json number --jq '.number'`。
- 如果找到已有 PR,保留其当前 review 状态;绝不要把现有 ready-for-review PR 转回 draft;只有本流程新建的 PR 才应开始时为 draft。
- PR 标题格式:`<type>(<scope>): <subject>`;`<scope>` 可选,由描述代码库某部分(component、service 或 subsystem)的名词组成。
- PR 标题类型使用:`feat` 用户新功能(不是构建脚本新功能);`fix` 用户 bug 修复(不是构建脚本修复);`docs` 文档变更;`style` 格式化、缺少分号等,无生产代码变更;`refactor` 重构生产代码,如重命名变量;`test` 添加缺失测试、重构测试,无生产代码变更;`chore` 更新 grunt 任务等,无生产代码变更。
- 标题示例:`feat: add hat wobble`,其中 `feat` 是类型,`add hat wobble` 是现在时摘要。
- 被调用时,使用 `gh` 编辑 PR body 和 title,使其反映指定 PR 的内容;检查现有 PR body 以确认是否有应保留的关键信息。
- 例如,绝不删除现有 PR body 中的图片,因为删除后作者可能无法恢复。
- 当仓库存在 PR 模板时,让最终 PR body 适配模板:保留有意义的标题、必填 checklist、仓库特定提示,但用净 diff 特定内容替换占位文本;模板要求时用 `N/A`。
- 不要因为 fallback 结构更短就丢弃模板章节。
- 必须在 PR body 中解释为什么做此变更;如果调用本技能的当前对话讨论过动机,要写入 PR body。
- PR body 还应解释改了什么,但应放在 why 之后。
- 只讨论该 commit 的净变更;通常不应讨论开发过程中尝试后又撤销的变更;重写 PR body 时,可能需要删除不再合适/不再让未来读者感兴趣的细节。
- 避免引用本地磁盘绝对路径;提到仓库内路径时,只使用仓库相对路径。
- 默认省略 `Verification`;仅当有值得为 reviewer 保留的行为证据时添加:复现的 bug、before/after 检查、覆盖变更行为的定向测试,或带输入和观察结果的手工场景。
- 不要将通用命令或自动化结果放入 `Verification`,例如 package tests、type checks、linters、formatters、pre-commit/pre-push hooks 或 CI 状态。
- 如果仓库模板要求 validation/verification 章节,保留该章节,避免通用填充:包含有意义的命令/结果、定向手工场景,或带原因的 `Not run`。
- 使用专业 Markdown:代码、路径、命令、flags 和标识符放入反引号。
- 使用 fenced code blocks 展示 shell transcripts 或多行示例。
- 引用与变更相关的现有代码时使用 GitHub permalinks。
- 引用相关 issues 或关联 PR,但不要在 PR 自己的 body 中引用该 PR 自身。
- 仓库没有 PR 模板时,使用 fallback PR body 结构:`## Why` 描述面向用户或维护者的问题,有用时包括因果;`## What Changed` 用简洁文字描述净实现变更。
适用边界 · 注意事项
- 用户未明确要求用 GitHub CLI(`gh`)一次性完成暂存、提交、推送并创建 GitHub PR 时,不适用。
- 缺少 `gh` 或 `gh` 未认证时,不适用;需先安装并执行 `gh auth login`。
- 目标不是 GitHub、不能使用 `gh`,或不想创建/更新 PR 时,不适用。