在 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 等提升效率 |
原子性提交 | 一个提交只做一件事 |
规范的提交日志能极大提升代码可维护性,尤其在团队协作或开源项目中尤为重要!