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中主要有以下类型,其中 feat 和 fix 最为常用
| 类型 | 说明 |
|---|---|
| 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 个字符。
footer
放 BREAKING CHANGE: 、Refs:#123 等结构化信息,遵循 Git trailer格式。
提交示例
fix(cart): 修复结算时金额计算错误
当用户同时使用“满减券”和“会员折扣”时,由于浮点数累加丢失精度,
导致最终实付金额比实际应支付金额多出 0.01 元。
解决方案:将前端的 Number 计算全部替换为 decimal.js 库进行精确运算,
并在后端返回值中统一使用字符串类型传递金额。
Closes #1892
Reviewed-by: Z
Refs: #1892