手写提交信息是团队中最容易敷衍的环节,常见的 "fix bug"、"update"、"111" 等描述对后期排障和生成 CHANGELOG 毫无价值。自动生成提交说明的核心目的不是偷懒,而是统一格式、保证语义化、减少拼写错误。
1. 推荐方案对比
| 方案 | 适用场景 | 特点 |
|---|---|---|
| Commitizen + 规范模板 | 团队项目、需要生成 CHANGELOG | 交互式问答,格式最标准 |
| AI 工具(aicommits/opencommit) | 个人开发、快速迭代 | 读取 diff 自动生成,需人工确认 |
| IDE 插件 | 混合场景 | 在 VS Code/JetBrains 内弹出模板框 |
2. Commitizen 方案(团队首选)
以 Node.js 项目为例,配置一次即可:
# 安装
npm install -D commitizen cz-conventional-changelog
# package.json 添加
{
"scripts": {
"commit": "cz"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
使用时不再用 git commit,而是:
git add .
npm run commit
# 按提示选择 type(feat/fix/docs等)、填写 scope 和描述
生成的提交信息示例:
feat(order): 新增订单超时自动取消逻辑
- 使用 Redis 延迟队列实现
- 超时时间默认 30 分钟,支持配置化
- 补充单元测试
Closes #45
配套约束:在 CI 中加入 commitlint 校验,不符合规范的提交直接阻断。
3. AI 辅助方案(个人/老项目)
如果项目历史包袱重,不想改工作流,可以用 AI 工具:
# 安装 aicommits(需配置 OpenAI 密钥)
npm install -g aicommits
aicommits config set OPENAI_KEY=sk-xxxx
# 使用
git add .
aic
工具会读取暂存区的 diff,生成类似 refactor(utils): 提取日期格式化函数减少重复代码 的说明,回车确认即提交。
4. 落地建议
- 新项目:强制走 Commitizen,配合
husky在本地拦截不规范提交。 - 老项目:先用 AI 工具或 IDE 插件(如 VS Code 的 Conventional Commits 插件)做半自动过渡,不要一刀切改流程。
- 敏感提交:涉及密码、密钥、配置回滚的修改,必须手写说明,禁用自动生成,防止 diff 中的敏感信息被 AI 二次暴露。
- 单次提交量:AI 生成适合 diff 在 200 行以内的场景,改动太大时生成结果会含糊,应拆分成多次提交。
5. 注意事项
自动生成后务必看一眼提交信息。AI 偶尔会过度推测意图,把 临时调试日志删除 写成 优化系统性能。提交说明最终是给人读的,机器只负责把格式写对。