在多人协作的Git项目中,每次提交代码时写一个清晰的提交信息(commit message)非常重要。它不仅能帮助团队成员快速理解这次提交的内容,还能在后续通过工具自动生成版本日志(比如 standard-version),甚至在排查问题时节省时间。但如果提交信息混乱或不规范,比如“修复bug”“改了点东西”,就很难追溯变更的目的和影响。

Angular风格的提交规范基本格式

Angular风格的commit message分为三部分:Header(标题)Body(正文)Footer(页脚)。其中Header是必须的,Body和Footer可选。整体结构如下:

<type>(<scope>): <subject>

[body]

[footer]

1. Header(标题):简洁描述变更核心

Header格式为:type(scope?): subject

  • type(类型):必须从以下列表中选择,用于明确变更性质:
  • feat:新功能(feature)
  • fix:修复bug
  • docs:文档更新
  • style:格式调整(不影响代码逻辑,如空格、换行、缩进)
  • refactor:代码重构(既非新增功能也非修复bug)
  • perf:性能优化
  • test:测试相关(添加/修改测试代码)
  • chore:其他不影响代码逻辑的变更(如构建脚本、依赖管理)

  • scope(范围,可选):指定变更影响的模块或功能区域(如loginapihome),若不明确可省略。

  • subject(主题):简短描述变更内容,需以祈使句开头(如“Add”而非“Added”),不超过50字符,结尾不加句号。

示例:

feat(login): add "Remember Me" option  // 类型:新功能,范围:login模块,主题:添加“记住我”选项

2. Body(正文):详细说明变更细节

Body用于补充说明为什么做这个变更具体实现内容,需另起一行,并用空行与Header分隔。可写多行,每行简洁描述关键点。

示例:

feat(login): add "Remember Me" option

- 新增“记住我”复选框,勾选后下次登录自动填充账号密码
- 使用加密存储token和账号信息,避免明文泄露

Footer可选,用于说明不兼容变更(Breaking Changes)关闭Issue,同样用空行与Body分隔。

(1)不兼容变更(Breaking Changes)

若提交包含破坏性变更(如API接口修改),需在Footer中以BREAKING CHANGE:开头,明确描述影响范围。

示例:

fix(api): correct user info response format

BREAKING CHANGE: 原 `/api/user/profile` 返回的 `{name: string}` 改为 `{username: string}`,旧调用方需同步更新。

(2)关闭Issue

若本次提交解决了某个Issue,可在Footer中用Closes #Issue编号格式关联。

示例:

fix(checkout): resolve payment timeout bug

Closes #123  // 关闭编号为123的Issue

完整示例集合

以下是不同场景的完整提交信息示例:

示例1:新功能(feat)

feat(home): add search component

- 新增顶部搜索栏,支持关键词实时搜索
- 绑定后端接口,返回匹配结果列表

示例2:修复bug(fix)

fix(auth): resolve token expiration issue

- 修复token过期后未自动刷新的问题
- 添加本地缓存过期时间检查,延长token有效期至7天

示例3:带破坏性变更(BREAKING CHANGE)

refactor(api): remove deprecated /v1/user/list endpoint

BREAKING CHANGE: 废弃 `/v1/user/list` API,所有调用方需迁移至 `/v2/user/list`。

示例4:关闭Issue

docs: update contribution guide

Closes #45  // 解决#45号Issue中“文档缺失”问题

工具辅助规范提交信息

手动写易出错,推荐使用工具自动生成规范提交信息:

  • Commitizen(cz-cli):交互式命令行工具,引导填写规范信息。
    安装:npm install -g commitizen
    使用:在项目根目录执行 commitizen init cz-conventional-changelog --save-dev,之后用 npm run commit 代替 git commit,按提示选择即可生成规范信息。

  • commitlint:校验提交信息是否符合规范,配合 husky 在提交前自动拦截不规范信息。

注意事项

  1. type必须规范:只能用指定类型(如feat而非“new”)。
  2. subject简洁明确:以动词开头(如“Add”“Fix”),避免冗余描述。
  3. Body按需填写:简单变更可省略Body,但复杂逻辑需说明“为什么改”。
  4. Footer的Breaking Changes需明确:破坏性变更必须单独列出,避免后续开发踩坑。

总结

规范的Git提交信息能让项目协作更高效,帮助团队快速理解代码变更,也便于工具自动生成版本日志。Angular风格是目前最通用的规范,从下一次提交开始,试着用清晰的格式写commit message吧!养成习惯后,你会发现追溯问题、协作沟通都会更顺畅~

小夜