git commit提交规范

在 Git 提交日志(Commit Log)中编写清晰、规范的 提交信息(Commit Message) 是团队协作和项目维护的关键。以下是一套 增强 Git 提交日志 的最佳实践和模板,适用于个人或团队开发:

1. 提交日志的基本结构

每一条提交信息建议分为 3 个部分

<类型>(<作用域>): <主题>       # 必填,标题行(50字符以内)
<空行>                        # 必填,标题与正文之间空一行
<正文>                        # 可选,详细描述修改内容
<空行>                        # 可选,正文与脚注之间空一行
<脚注>                        # 可选,关联 Issue 或 Breaking Changes

示例

feat(user): 新增用户注册接口

- 添加 `/api/register` 接口
- 支持邮箱验证码注册
- 补充单元测试

Closes #123

2. 标题行(必填)

(1) 类型(Type)

类型说明
feat新增功能
fix修复 Bug
docs文档更新(如 README、注释)
style代码风格调整(空格、格式化等,不改变逻辑)
refactor代码重构(既非新功能,也非修复 Bug)
perf性能优化
test测试相关(新增或修改测试用例)
chore构建或辅助工具变动(如依赖更新、CI 配置)
revert回滚某次提交

(2) 作用域(Scope,可选)

  • 说明改动影响的范围(如模块、组件、文件名):
fix(auth): 修复登录态过期问题
refactor(utils): 优化日期格式化函数

(3) 主题(Subject)

  • 简明扼要(不超过 50 字符)
  • 使用祈使语气(如“新增”而非“新增了”)
  • 首字母小写,无句号

❌ 错误示例:

Fixed the bug in login page.

✅ 正确示例:

fix(login): 修复登录页面重定向问题

3. 正文(Body,可选)

  • 详细描述:为什么修改、如何修改、解决的问题。
  • 每行不超过 72 字符(方便终端阅读)。
  • 使用列表- 或 *)提升可读性。

示例

- 修复用户列表分页失效问题
- 移除废弃的 `loadUsers()` 方法
- 补充分页组件单元测试

4. 脚注(Footer,可选)

  • 关联 Issue
Closes #123, #124
Fixes #456
  • 重大变更(Breaking Changes)
BREAKING CHANGE: 移除对旧版 API 的支持,需升级客户端 SDK。

5. 增强技巧

(1) 使用工具规范提交

Commitizen:交互式生成符合规范的提交日志

npm install -g commitizen
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
git cz  # 替代 git commit

Husky + Commitlint:提交时自动校验格式
(配置参考:commitlint 官方文档

(2) 关联代码变更

  • 原子性提交:一个提交只做一件事(如修复一个 Bug 或新增一个功能)。
  • git add -p:交互式选择部分代码变更,避免无关修改混入提交。

(3) 模板化

在 .gitmessage 中设置模板:

# 创建模板文件
echo "feat(<scope>): <subject>\n\n<body>\n\n<footer>" > ~/.gitmessage

# 配置 Git 使用模板
git config --global commit.template ~/.gitmessage

6. 优秀示例

功能新增

feat(checkout): 支持支付宝支付

- 新增支付宝支付接口 `/api/pay/alipay`
- 添加支付成功回调处理
- 更新文档中的支付流程说明

Closes #28

Bug 修复

fix(profile): 修复头像上传失败问题

- 修复因文件大小限制导致的 413 错误
- 将上传限制从 1MB 调整为 5MB
- 添加错误提示文案

Fixes #15

重构

refactor(database): 迁移 MongoDB 到 PostgreSQL

- 替换所有 `mongoose` 调用为 `sequelize`
- 更新数据模型定义
- 调整测试用例适配新数据库

BREAKING CHANGE: 需更新环境变量 `DB_URL` 为 PostgreSQL 连接串。

总结

要点说明
标题行类型 + 作用域 + 主题(50 字符内)
正文详细说明修改内容(72 字符/行)
脚注关联 Issue 或标注重大变更
工具辅助Commitizen、Commitlint 等提升效率
原子性提交一个提交只做一件事

规范的提交日志能极大提升代码可维护性,尤其在团队协作或开源项目中尤为重要!