📚 为什么需要 Commit 规范?
良好的 Commit 规范可以:
- ✅ 提高可读性:快速了解每次提交的目的
- ✅ 方便维护:追踪历史更改和定位问题
- ✅ 自动化工具:生成 CHANGELOG,语义化版本控制
- ✅ 团队协作:统一的提交风格,降低沟通成本
🎯 约定式提交规范(Conventional Commits)
基本格式
1 2 3 4 5
| <type>(<scope>): <subject>
<body>
<footer>
|
三个组成部分
- Header(必需):
<type>(<scope>): <subject>
- Body(可选):详细描述
- Footer(可选):关联 Issue 或 Breaking Changes
Type(类型)
| Type |
说明 |
示例 |
| feat |
新功能 |
feat: 添加用户登录功能 |
| fix |
Bug 修复 |
fix: 修复登录按钮无响应问题 |
| docs |
文档更新 |
docs: 更新 README 安装说明 |
| style |
代码格式(不影响功能) |
style: 格式化代码,统一缩进 |
| refactor |
重构(不新增功能,不修复 bug) |
refactor: 重构用户模块代码 |
| perf |
性能优化 |
perf: 优化列表渲染性能 |
| test |
测试相关 |
test: 添加用户登录单元测试 |
| build |
构建系统或外部依赖 |
build: 升级 webpack 到 5.0 |
| ci |
CI 配置文件和脚本 |
ci: 添加 GitHub Actions 配置 |
| chore |
其他杂项(不修改 src 或测试) |
chore: 更新依赖包版本 |
| revert |
回滚之前的提交 |
revert: 回滚提交 abc123 |
Scope(范围)- 可选
指明修改影响的范围,如:
1 2 3
| feat(user): 添加用户个人资料编辑功能 fix(api): 修复接口超时问题 docs(readme): 更新项目配置说明
|
常见 Scope:
user - 用户模块
auth - 认证模块
api - API 接口
ui - UI 组件
config - 配置文件
deps - 依赖相关
Subject(主题)
- 简短描述(建议不超过 50 字符)
- 使用祈使句,现在时态:
添加 而不是 添加了
- 首字母小写
- 结尾不加句号
✅ 好的示例:
1 2
| feat: 添加用户头像上传功能 fix: 修复页面滚动卡顿问题
|
❌ 不好的示例:
1 2 3
| 添加了功能 feat:修复 bug Feat: Add feature.
|
📖 Body(正文)- 可选
详细描述本次提交的内容,解释:
1 2 3 4 5 6 7 8
| feat(user): 添加用户头像上传功能
- 支持拖拽上传 - 限制文件大小为 5MB - 自动压缩图片质量
用户反馈上传头像步骤繁琐, 本次优化了上传流程,提升用户体验。
|
1. 关闭 Issue
1 2 3 4
| fix: 修复登录失败问题
Closes Closes
|
2. 不兼容变动(Breaking Changes)
1 2 3 4 5
| feat(api): 重构用户 API 接口
BREAKING CHANGE: 用户 API 路径从 /api/user 改为 /api/v2/users 需要前端同步更新接口调用路径
|
💡 实际示例
示例 1:新功能
1 2 3 4 5 6 7
| feat(auth): 添加双因素认证功能
- 支持 Google Authenticator - 支持短信验证码 - 添加认证配置页面
Closes
|
示例 2:Bug 修复
1 2 3 4 5 6
| fix(payment): 修复支付金额显示错误
支付页面金额显示少了两位小数, 修改了金额格式化逻辑。
Closes
|
示例 3:性能优化
1 2 3 4
| perf(list): 优化长列表渲染性能
使用虚拟滚动技术,将 1000+ 条数据 的渲染时间从 3s 降低到 300ms。
|
示例 4:重构
1 2 3 4 5 6 7
| refactor(user): 重构用户状态管理
使用 Pinia 替代 Vuex,简化状态管理逻辑, 提高代码可维护性。
BREAKING CHANGE: 移除了 Vuex 相关代码,需要更新依赖包
|
示例 5:文档更新
1 2 3 4 5
| docs: 更新 API 文档
- 添加认证接口说明 - 修正参数类型错误 - 补充示例代码
|
🛠️ 工具辅助
1. Commitizen
使用命令行交互式工具生成规范的 Commit:
1 2 3 4 5 6 7 8
| npm install -g commitizen cz-conventional-changelog
commitizen init cz-conventional-changelog --save-dev --save-exact
git cz
|
交互式提交:
1 2 3 4 5 6 7 8
| ? Select the type of change: (Use arrow keys) ❯ feat: 新功能 fix: Bug修复 docs: 文档更新 style: 代码格式 refactor: 重构 perf: 性能优化 test: 测试
|
2. Commitlint
检查 Commit 消息是否符合规范:
1 2 3 4 5 6 7 8 9 10
| npm install --save-dev @commitlint/config-conventional @commitlint/cli
module.exports = { extends: ['@commitlint/config-conventional'] };
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
|
3. Standard Version
自动生成 CHANGELOG 和版本号:
1 2 3 4 5
| npm install --save-dev standard-version
npm run release
|
📋 快速参考
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| git commit -m "feat(user): 添加用户注册功能"
git commit -m "feat(user): 添加用户注册功能" \ -m "" \ -m "- 支持邮箱注册" \ -m "- 支持手机号注册" \ -m "" \ -m "Closes #123"
git commit --amend
git cz
|
Commit Message 模板
创建 .gitmessage 文件:
配置使用模板:
1
| git config --global commit.template .gitmessage
|
✅ 最佳实践
推荐做法
- ✅ 原子提交:一次提交只做一件事
- ✅ 频繁提交:小步快跑,便于回滚
- ✅ 描述清晰:让别人(和未来的自己)看懂
- ✅ 使用工具:Commitizen + Commitlint
- ✅ 团队统一:制定团队规范文档
避免做法
- ❌ 模糊描述:
update, fix bug, 修改
- ❌ 大杂烩:一次提交包含多个不相关的改动
- ❌ 非规范格式:随意书写,没有统一标准
- ❌ 中英混用:保持语言一致性
🎯 团队规范建议
1. 定义团队规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # Git Commit 规范
## 格式
<type>(<scope>): <subject>
## Type 类型(必选)
- feat: 新功能 - fix: Bug 修复 - docs: 文档 - style: 格式 - refactor: 重构 - test: 测试 - chore: 其他
## 语言
统一使用中文描述
## 工具
必须使用 commitizen 提交
|
2. 配置 Pre-commit Hook
1 2 3 4
| #!/bin/sh
npx --no -- commitlint --edit "$1"
|
3. CI 检查
1 2 3 4 5 6 7 8 9 10 11 12 13
| name: Commit Lint
on: [pull_request]
jobs: commitlint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: wagoid/commitlint-github-action@v5
|
📊 Commit 统计分析
查看提交统计
1 2 3 4 5 6
| git shortlog -s -n
git log --oneline | grep -E "^[a-z]+(\(.+\))?:" | \ cut -d: -f1 | sort | uniq -c | sort -rn
|
生成 CHANGELOG
1 2 3 4 5 6
| npm run release
git log --pretty=format:"%s" --since="2024-01-01" | \ grep -E "^feat|^fix" > CHANGELOG.md
|
💡 总结
- 规范格式:
<type>(<scope>): <subject>
- 核心类型:feat, fix, docs, style, refactor, perf, test, chore
- 使用工具:Commitizen + Commitlint + Husky
- 团队协作:统一规范,持续执行
- 原子提交:小步快跑,描述清晰
良好的 Commit 规范是项目可维护性的基石!✨
📚 相关资源