Conventional Commits 规范详解

Conventional Commits
git
git-commit
conventional-commits
git-flow
Author
Published

Thursday, April 17, 2025

背景

在软件开发中,版本控制是一个至关重要的环节。Git 是最流行的版本控制系统之一,而 Git 提交信息(commit message)则是记录代码变更的重要方式。而我们经常会遇见:

  • 查看项目 Git 日志时,提交信息杂乱无章,完全看不懂每个提交的意图。

  • 手动编写 CHANGELOG 耗时费力,还容易遗漏重要变更。

  • 团队协作中,成员提交风格不一,代码审查效率低下

为了提高 Git 提交信息的可读性和一致性,Conventional Commits 规范(地址:https://www.conventionalcommits.org/en/v1.0.0/)应运而生。这是一套被 Angular、Vue 等顶级开源项目广泛采用的 Git 提交规范,能将提交信息从混乱的草稿变为清晰的文档。

这里,我们将详细介绍 Conventional Commits 规范的定义、格式、使用场景以及一些最佳实践。

Conventional Commits

Conventional Commits 规范

Conventional Commits 是一套基于 Git 提交消息的轻量级约定,旨在通过结构化格式提升提交信息的可读性和自动化处理能力。它的核心目标包括:

  • 人类可读:清晰描述提交的意图和影响范围。

  • 机器友好:支持自动化生成 CHANGELOG 和语义化版本(SemVer)。

  • 团队协作:统一提交风格,减少沟通成本。

格式结构

一条规范的提交消息需包含以下部分(部分可选):

<类型>[可选范围]: <简短描述>

[可选正文]

[可选脚注]

1. 类型(type)

类型是提交的核心部分,表示提交的目的和性质。常见的类型包括:

类型 用途 对应 SemVer
feat 新增功能 MINOR(次版本)
fix 修复 Bug PATCH(补丁版本)
BREAKING CHANGE 破坏性变更(如 API 不兼容) MAJOR(主版本)
docs 文档更新 -(不影响版本)
style 代码格式调整(如缩进、空格) -(不影响版本)
refactor 代码重构(不新增功能或修复 Bug) -(不影响版本)

其他推荐类型有:build(构建系统)、ci(持续集成)、test(测试用例)等。

这里我们插一句,对于版本号的控制,可以参考以下规则:

版本号控制

2. 可选范围(scope)

可选范围用于指定提交影响的模块或功能区域。它可以是一个具体的模块名、文件名或其他标识符。范围有助于快速定位问题和理解变更的上下文。

例如:feat(auth): add JWT authentication 表示在 auth 模块中新增了 JWT 身份验证功能。

3. 简短描述(subject)

简短描述是对提交内容的简要说明,通常不超过 72 个字符。它应以小写字母开头,并使用祈使句(imperative mood)来描述变更的目的。

例如:fix: correct typo in README 表示修复了 README 文件中的拼写错误。

4. 可选正文(body)

可选正文用于详细描述提交的内容和背景信息。它可以包含多行文本,通常用于解释为什么要进行此更改、如何实现等。正文应与简短描述之间空一行。

例如:

feat: 支持多语言切换  
  
新增中英文切换按钮,默认跟随系统语言。  
依赖第三方库 `i18n-utils`,需运行 `npm install` 安装。  

5. 可选脚注(footer)

可选脚注用于记录与提交相关的其他信息,如关联的任务、问题或破坏性变更。它通常以 BREAKING CHANGE: 开头,后跟详细说明。脚注也可以包含引用的 issue 编号或链接。

例如:

BREAKING CHANGE:
- 更新了 API 接口,删除了 `getUser` 方法,改为 `fetchUser`。
- 需要更新客户端代码以适应新接口。
Closes #123
Review by @zhenlu

为什么推荐使用

1. 自动化工具支持

  • 生成 CHANGELOG:工具(如 standard-version)可自动从提交历史提取内容生成变更日志。

  • 语义化版本控制:根据提交类型自动升级版本号(feat → MINOR,fix → PATCH,BREAKING CHANGE → MAJOR)。

  • 代码审查加速:通过类型快速定位提交意图,减少沟通成本。

2. 团队协作效率提升

  • 统一提交风格:团队成员遵循相同的提交规范,减少沟通障碍,避免风格混乱。

  • 清晰的历史记录:通过结构化的提交信息,团队成员可以快速了解项目进展和变更。

  • 问题追溯:通过关联的 issue 编号和脚注,快速定位问题和变更历史。

3. 开源项目友好性

  • 开源项目通常需要清晰的文档和变更记录,Conventional Commits 规范可以帮助维护者和用户快速了解项目的演变。

  • 社区贡献者可以通过遵循规范的提交信息,轻松参与项目开发,降低贡献门槛。

Takeaway

Conventional Commits 不仅是技术规范,更是团队协作的沟通协议。通过标准化提交信息,它能将 Git 日志从杂乱的历史记录升级为项目演进的清晰路线图。无论是个人项目还是大型团队,尽早引入这一规范都将显著提升开发效率和代码质量。