mirror of
https://github.com/sinanyuntu/trade-message-center.git
synced 2026-09-17 13:22:11 +08:00
docs: 强化 PR 标题前缀校验规则
This commit is contained in:
@@ -19,7 +19,8 @@ description: 准备当前 Git 功能分支并向 origin/main 创建 PR;用于
|
|||||||
4. 使用 `git rebase origin/main` 将当前分支 rebase 到刚获取的 `origin/main`。
|
4. 使用 `git rebase origin/main` 将当前分支 rebase 到刚获取的 `origin/main`。
|
||||||
5. 如果 rebase 有任何冲突,执行上述硬停止规则。
|
5. 如果 rebase 有任何冲突,执行上述硬停止规则。
|
||||||
6. 将当前分支推送到 `origin`。如果 rebase 改写了远程已有的当前分支,只能使用 `git push --force-with-lease origin HEAD` 更新;绝不能使用普通 `--force`。
|
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 文案
|
## 分支命名与 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`。
|
- 不要快进、合并或将当前分支推送进本地或远程 `main`;改动只能经由 PR 进入 `main`。
|
||||||
- 每次发布都必须完成分支命名决策:优先依据准确覆盖改动的任务,否则依据实际改动;目标名不同就必须重命名。报告名称来源和判断证据。
|
- 每次发布都必须完成分支命名决策:优先依据准确覆盖改动的任务,否则依据实际改动;目标名不同就必须重命名。报告名称来源和判断证据。
|
||||||
- PR 标题必须使用匹配改动的类型前缀,如 `feat:` 或 `fix:`;其余标题文字和正文均为中文。
|
- `gh pr create` 之前,PR 标题必须通过硬校验:以最终分支的同一 `type` 和精确的 `<type>: ` 开头。标题不合规时不得创建 PR;创建后报告实际标题。
|
||||||
- 不要擅自执行无关清理、冲突解决、合并 PR、删除分支,或对当前 rebase 后分支之外的任何分支强制推送。
|
- 不要擅自执行无关清理、冲突解决、合并 PR、删除分支,或对当前 rebase 后分支之外的任何分支强制推送。
|
||||||
|
|
||||||
## 命令形态
|
## 命令形态
|
||||||
@@ -66,9 +71,16 @@ git rebase origin/main
|
|||||||
git push origin HEAD
|
git push origin HEAD
|
||||||
# 若 rebase 后的当前分支已存在于 origin:
|
# 若 rebase 后的当前分支已存在于 origin:
|
||||||
git push --force-with-lease origin HEAD
|
git push --force-with-lease origin HEAD
|
||||||
# PR 标题和正文使用中文;标题必须以 `feat:`、`fix:` 或 `chore:` 等类型前缀开头
|
# 从最终分支复用类型;任一步不满足即退出,禁止创建无前缀或类型不一致的 PR
|
||||||
gh pr create --base main --head "$(git branch --show-current)" \
|
branch_name="$(git branch --show-current)"
|
||||||
--title "<type>: <中文标题>" \
|
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 "<中文正文:改动、验证、风险或后续事项>"
|
--body "<中文正文:改动、验证、风险或后续事项>"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -79,4 +91,5 @@ gh pr create --base main --head "$(git branch --show-current)" \
|
|||||||
- “冲突很简单”或“我能推断应如何解决”仍意味着停止并询问;它依然是 rebase 冲突。
|
- “冲突很简单”或“我能推断应如何解决”仍意味着停止并询问;它依然是 rebase 冲突。
|
||||||
- “只是拼写错误或紧急修复”不能成为保留临时、过时或与改动不符分支名,也不能绕过 PR 流程的理由。
|
- “只是拼写错误或紧急修复”不能成为保留临时、过时或与改动不符分支名,也不能绕过 PR 流程的理由。
|
||||||
- “merge 更快”不能替代要求的 rebase。
|
- “merge 更快”不能替代要求的 rebase。
|
||||||
|
- “标题已是中文”“改动很小”或“PR 工具会处理”不能成为省略 `feat:`、`fix:` 等精确类型前缀的理由。
|
||||||
- 英文 PR 标题或正文不符合本项目的 PR 文案约定。
|
- 英文 PR 标题或正文不符合本项目的 PR 文案约定。
|
||||||
|
|||||||
Reference in New Issue
Block a user