用途
Conventional Commits 是一套结构化提交信息规范,旨在让提交历史可被机器解析,从而支持自动生成变更日志(CHANGELOG)和语义化版本(SemVer)管理。本技能提供该规范的完整参考,包括格式、类型、破坏性变更标记、校验规则及配套工具。
主要能力
- 提交格式:定义
<type>[optional scope]: <description>结构,可选正文与页脚。 - 常用类型:feat(新功能,MINOR)、fix(修复,PATCH)、docs、style、refactor、perf、test、build、ci、chore、revert 等。
- 破坏性变更:通过
!或BREAKING CHANGE:页脚标记,触发 MAJOR 版本升级。 - SemVer 映射:fix → PATCH,feat → MINOR,BREAKING CHANGE 或
!→ MAJOR;破坏性变更覆盖类型。 - 变更日志集成:提交类型直接映射到变更日志章节(如 feat → Added,fix → Fixed)。
- 自动化工具:conventional-changelog、semantic-release、release-please 可解析提交、生成 CHANGELOG、确定版本号并自动发布。
- 规范规则:明确 MUST(必须)与 MAY(可选)条款,包括类型前缀、冒号空格、描述位置、破坏性变更大写等。
- Git 配置:支持提交模板(
git config commit.template .gitmessage)与预提交校验脚本。 - 代理工作流:要求代理在提出分支名、提交信息或 PR 描述前,必须检查
git status与git diff,基于完整变更集输出。
使用方式
- 按格式编写提交信息,例如:
feat(auth): add OAuth2 support。 - 破坏性变更使用
!或页脚,例如:feat!: send email when product shipped或BREAKING CHANGE: ...。 - 配置 Git 提交模板:
git config commit.template .gitmessage。 - 使用 commitlint 校验提交信息,commitizen 交互式生成,conventional-changelog 生成变更日志,semantic-release 或 release-please 自动化发布。
- 代理工作流步骤:
git status --short→git diff→git diff --staged→ 基于完整变更集提出分支名、提交信息与 PR 描述。
适用场景
- 团队需要统一提交规范,提升历史可读性。
- 自动化生成变更日志与版本发布。
- 代理或开发者需要根据实际变更生成结构化提交信息与 PR 描述。
限制
- 规范本身不强制所有贡献者使用,可通过 squash 合并由维护者统一编写。
- 错误类型在合并前可用
git rebase -i修正,发布后自动化工具会遗漏该提交。 - 禁止使用模糊信息(如 "fix stuff"、"update"、"wip"),禁止混合无关变更,禁止遗漏破坏性变更标记,禁止使用非标准类型(除非团队同意),禁止遗漏描述与正文间的空行。
- 官方规范链接:https://www.conventionalcommits.org/en/v1.0.0/ ;语义化版本:https://semver.org/spec/v2.0.0.html 。
- 模板文件:assets/commit-msg.template、assets/validate-commit-msg.sh。