docs: 强化 PR 标题前缀校验规则

This commit is contained in:
YBF
2026-09-17 12:12:56 +08:00
parent b0197aad0c
commit c67dbe8932
@@ -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 前缀 `<type>: ` 开头,后接中文描述。标题不符合时,先修正标题;不得执行 `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`,并使用精确格式 `<type>: <中文描述>`,例如 `fix: 修复 Chrome 消息回调兼容性`。允许的前缀仅为 `feat:``fix:``chore:``docs:``refactor:``test:``ci:`;冒号必须是半角 ASCII `:`,后面必须有一个空格。
禁止创建没有前缀、使用全角冒号、缺少空格、使用未列出类型,或与最终分支类型不一致的 PR。不能以“标题已是中文”“改动很小”或“PR 工具会补全标题”为由跳过此检查。正文应以中文说明改动、验证以及风险或后续事项。
## 不变量
- 不要快进、合并或将当前分支推送进本地或远程 `main`;改动只能经由 PR 进入 `main`
- 每次发布都必须完成分支命名决策:优先依据准确覆盖改动的任务,否则依据实际改动;目标名不同就必须重命名。报告名称来源和判断证据。
- PR 标题必须使用匹配改动的类型前缀,如 `feat:``fix:`;其余标题文字和正文均为中文
- `gh pr create` 之前,PR 标题必须通过硬校验:以最终分支的同一 `type` 和精确的 `<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 "<type>: <中文标题>" \
# 从最终分支复用类型;任一步不满足即退出,禁止创建无前缀或类型不一致的 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 文案约定。