Git - commit 提交规范

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。本文主要介绍在Git提交过程中,Commit Message应该遵循的规范。

Conventional Commits

Conventional Commits是被广泛采用的一种提交消息规范,主要结构如下:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

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

[可选 正文]

[可选 脚注]

语义化版本

语义化版本(Semantic Versioning,常简称为 SemVer)是一套全球通用规范。
通过版本号的字面数字,告诉使用者这次升级的“风险等级”和“变更类型”。
版本号格式固定为三组数字:主版本号.次版本号.修订号(即 MAJOR.MINOR.PATCH),例如 2.14.1

type

type中主要有以下类型,其中 featfix 最为常用

类型 说明
feat 新增了一个功能,对应语义化版本中的MINOR
fix 修复一个代码bug,对应语义化版本中的PATCH
BREAKING CHANGE 表示引入了破坏性 API 变更,在type后加!,对应语义化版本中的MAJOR
docs 仅涉及文档的变更,如 README、注释等
style 代码格式调整
refactor 代码重构,不新增功能也不修复bug
perf 用于优化性能,例如提升代码的性能、减少内存占用等
test 添加或修正测试代码
build 影响构建系统或外部依赖的变更
ci 修改CI的配置文件或脚本
revert 撤销之前的某次提交
chore 用于对非业务性代码进行修改,例如修改构建流程或者工具配置等

scope

scope是一个可选的、提供额外信息的字段,用来说明本次提交具体影响了代码库的哪个部分。
scope应该是一个简短的名词,并且团队内部最好能形成统一的用词规范。
例如:user-profile、payment、auth

description

description是标题行,使用祈使句,动词开头(add 而非 added),不超过50个字符。
Git官网文档建议:第一行用一行简短文字概括变革,空行后接更详细的描述。

body

body是正文,写Why,不写What。
diff已经展示了what,正文要回答“动机与背景(为什么)、实现思路与权衡(怎么做)”,并关联issue号。
每行文本不超过 72 个字符。

放 BREAKING CHANGE: 、Refs:#123 等结构化信息,遵循 Git trailer格式。

提交示例

fix(cart): 修复结算时金额计算错误

当用户同时使用“满减券”和“会员折扣”时,由于浮点数累加丢失精度,
导致最终实付金额比实际应支付金额多出 0.01 元。

解决方案:将前端的 Number 计算全部替换为 decimal.js 库进行精确运算,
并在后端返回值中统一使用字符串类型传递金额。

Closes #1892

Reviewed-by: Z
Refs: #1892

参考

Conventional Commits