From c67dbe8932dba8638466c8e1d8f165f171130ee4 Mon Sep 17 00:00:00 2001 From: YBF <47051132+YBFACC@users.noreply.github.com> Date: Thu, 17 Sep 2026 12:12:56 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BC=BA=E5=8C=96=20PR=20=E6=A0=87?= =?UTF-8?q?=E9=A2=98=E5=89=8D=E7=BC=80=E6=A0=A1=E9=AA=8C=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skills/publishing-git-branches/SKILL.md | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/.agents/skills/publishing-git-branches/SKILL.md b/.agents/skills/publishing-git-branches/SKILL.md index 975096b..e320569 100644 --- a/.agents/skills/publishing-git-branches/SKILL.md +++ b/.agents/skills/publishing-git-branches/SKILL.md @@ -19,7 +19,8 @@ description: 准备当前 Git 功能分支并向 origin/main 创建 PR;用于 4. 使用 `git rebase origin/main` 将当前分支 rebase 到刚获取的 `origin/main`。 5. 如果 rebase 有任何冲突,执行上述硬停止规则。 6. 将当前分支推送到 `origin`。如果 rebase 改写了远程已有的当前分支,只能使用 `git push --force-with-lease origin HEAD` 更新;绝不能使用普通 `--force`。 -7. 以当前分支为 head、远程 `main` 为 base 创建 PR。使用仓库配置的 PR 工具,标题和正文均使用中文,并报告 PR URL。 +7. **创建 PR 前执行标题硬校验。** 从最终分支名提取 `type`;它必须是下表中的一种。PR 标题必须精确以同一个 ASCII 前缀 `: ` 开头,后接中文描述。标题不符合时,先修正标题;不得执行 `gh pr create`。 +8. 以当前分支为 head、远程 `main` 为 base 创建 PR。使用仓库配置的 PR 工具,标题和正文均使用中文,并报告 PR URL 和实际创建的标题。 ## 分支命名与 PR 文案 @@ -42,13 +43,17 @@ description: 准备当前 Git 功能分支并向 origin/main 创建 PR;用于 这是发布前的强制步骤,而不是仅在名称“明显不匹配”时才执行的风格建议。若当前名称已经精确等于按上述规则得出的目标名称,不必执行无效的同名重命名,但仍须说明名称来自任务还是实际改动,并给出相应证据。 -PR 标题和正文必须为中文。标题必须以匹配实际改动的常规类型前缀开头,例如 `fix: 修复 Chrome 消息回调兼容性`;描述文字使用中文。正文应以中文说明改动、验证以及风险或后续事项。 +## PR 标题硬门槛 + +PR 标题不是文案偏好,而是创建 PR 的前置条件。必须从最终分支名复用 `type`,并使用精确格式 `: <中文描述>`,例如 `fix: 修复 Chrome 消息回调兼容性`。允许的前缀仅为 `feat:`、`fix:`、`chore:`、`docs:`、`refactor:`、`test:`、`ci:`;冒号必须是半角 ASCII `:`,后面必须有一个空格。 + +禁止创建没有前缀、使用全角冒号、缺少空格、使用未列出类型,或与最终分支类型不一致的 PR。不能以“标题已是中文”“改动很小”或“PR 工具会补全标题”为由跳过此检查。正文应以中文说明改动、验证以及风险或后续事项。 ## 不变量 - 不要快进、合并或将当前分支推送进本地或远程 `main`;改动只能经由 PR 进入 `main`。 - 每次发布都必须完成分支命名决策:优先依据准确覆盖改动的任务,否则依据实际改动;目标名不同就必须重命名。报告名称来源和判断证据。 -- PR 标题必须使用匹配改动的类型前缀,如 `feat:` 或 `fix:`;其余标题文字和正文均为中文。 +- `gh pr create` 之前,PR 标题必须通过硬校验:以最终分支的同一 `type` 和精确的 `: ` 开头。标题不合规时不得创建 PR;创建后报告实际标题。 - 不要擅自执行无关清理、冲突解决、合并 PR、删除分支,或对当前 rebase 后分支之外的任何分支强制推送。 ## 命令形态 @@ -66,9 +71,16 @@ git rebase origin/main git push origin HEAD # 若 rebase 后的当前分支已存在于 origin: git push --force-with-lease origin HEAD -# PR 标题和正文使用中文;标题必须以 `feat:`、`fix:` 或 `chore:` 等类型前缀开头 -gh pr create --base main --head "$(git branch --show-current)" \ - --title ": <中文标题>" \ +# 从最终分支复用类型;任一步不满足即退出,禁止创建无前缀或类型不一致的 PR +branch_name="$(git branch --show-current)" +pr_type="${branch_name%%/*}" +case "$pr_type" in + feat|fix|chore|docs|refactor|test|ci) ;; + *) printf '无效的分支类型,禁止创建 PR: %s\n' "$pr_type" >&2; exit 1 ;; +esac +pr_title="${pr_type}: <中文标题>" +gh pr create --base main --head "$branch_name" \ + --title "$pr_title" \ --body "<中文正文:改动、验证、风险或后续事项>" ``` @@ -79,4 +91,5 @@ gh pr create --base main --head "$(git branch --show-current)" \ - “冲突很简单”或“我能推断应如何解决”仍意味着停止并询问;它依然是 rebase 冲突。 - “只是拼写错误或紧急修复”不能成为保留临时、过时或与改动不符分支名,也不能绕过 PR 流程的理由。 - “merge 更快”不能替代要求的 rebase。 +- “标题已是中文”“改动很小”或“PR 工具会处理”不能成为省略 `feat:`、`fix:` 等精确类型前缀的理由。 - 英文 PR 标题或正文不符合本项目的 PR 文案约定。