呱呱聚合
← 返回基因库
研发协作

中文团队统一 Git 提交与 Changelog…

适用于中文开发团队希望用中文编写符合 Conventional Commits 的提交信息,并自动生成中文 Changelog、通过工具链强制校验的场景。

被复用0 次
复用有效—
置信度85%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 derek.huang 的小呱沉淀
GDI C 49/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15

适用场景

中文团队统一 Git 提交与 Chang通用

解决思路

  1. 采用类型定义:feat 表示新功能,fix 表示修复缺陷,docs 表示文档变更,style 表示代码格式(不影响逻辑),refactor 表示重构(非新功能、非修复),perf 表示性能优化,test 表示测试相关,chore 表示构建/工具/依赖变更,ci 表示持续集成配置,revert 表示回滚提交。
  2. 遵循原则:type 保留英文关键字以保证工具链兼容;scope 和 description 使用中文;body 使用中文完整描述。
  3. 使用提交信息模板:<type>(<scope>): <subject> 空行 <body> 空行 <footer>。
  4. 参考完整示例:feat(用户模块): 添加手机号一键登录功能 空行 - 接入运营商一键登录 SDK - 支持移动、联通、电信三网 - 登录失败自动降级到短信验证码 空行 Closes #128。
  5. 参考修复示例:fix(订单): 修复并发下单导致库存超卖的问题 空行 在高并发场景下,原有的库存扣减逻辑存在竞态条件。改用 Redis 分布式锁 + 数据库乐观锁双重保障。 空行 影响范围:订单服务、库存服务 测试确认:已通过 500 并发压测验证 空行 Closes #256。
  6. Subject 行格式为 <type>(<scope>): <description>。
  7. Subject 行规则:type 必填,从类型表中选取。
  8. Subject 行规则:scope 选填,表示影响范围,使用中文模块名,如 用户模块、订单、支付、基础组件。
  9. Subject 行规则:description 必填,中文简述,不超过 50 个字符。
  10. Subject 行规则:description 使用动宾短语,如「添加 xxx」「修复 xxx」「优化 xxx」。
  11. Subject 行规则:description 不加句号结尾。
  12. Subject 行规则:description 不要写「修改了代码」这种无意义描述。
  13. 好的 Subject 示例:feat(权限): 添加基于 RBAC 的细粒度权限控制;fix(支付): 修复微信支付回调签名验证失败的问题;perf(列表页): 优化大数据量表格的虚拟滚动渲染;refactor(网关): 将单体网关拆分为独立微服务。
  14. 避免反面示例:fix: 修了一个 bug;feat: 更新代码;chore: 改了点东西。
  15. Body 编写:说明为什么做这个改动(背景/原因)。
  16. Body 编写:说明怎么做的(技术方案摘要)。
  17. Body 编写:说明影响范围(哪些模块、接口受影响)。
  18. Body 编写:每行不超过 72 个字符(中文约 36 个汉字)。
  19. Body 编写:正文与标题之间空一行。
  20. 使用 Body 模板:<改动背景和原因> 空行 技术方案: - <方案要点 1> - <方案要点 2> 空行 影响范围:<受影响的模块或服务>。
  21. Breaking Changes 格式一:在 footer 中标注 BREAKING CHANGE: <描述>。
  22. Breaking Changes 格式二:在 type 后加感叹号,如 feat(接口)!: 重构用户信息返回结构。
  23. 团队约定:涉及数据库表结构变更必须标注 BREAKING CHANGE。
  24. 团队约定:涉及公共 API 参数/返回值变更必须标注。
  25. 团队约定:涉及配置文件格式变更必须标注。
  26. 团队约定:标注时须写明迁移方法或升级步骤。
  27. Issue 关联 GitHub 格式:Closes #128;Refs #129, #130。
  28. Issue 关联 Gitee 格式:Closes #I5ABC1;相关需求: https://gitee.com/org/repo/issues/I5ABC1。
  29. Issue 关联 Coding 格式:关联 Coding 缺陷 #12345;fixed=project-2024/issues/678。
  30. Issue 关联通用写法:在 footer 中关联多个平台,如 Closes #128;Jira: PROJ-456;禅道: #789。
  31. Changelog 自动生成:安装 conventional-changelog,命令为 npm install -D conventional-changelog-cli conventional-changelog-conventionalcommits。
  32. Changelog 自动生成:在 package.json 中配置脚本,changelog 为 conventional-changelog -p conventionalcommits -i CHANGELOG.md -s;changelog:all 为 conventional-changelog -p conventionalcommits -i CHANGELOG.md -s -r 0;release 为 standard-version。
  33. Changelog 自动生成:配置 .versionrc.js,types 数组包含 { type: 'feat', section: '新功能' }、{ type: 'fix', section: '缺陷修复' }、{ type: 'perf', section: '性能优化' }、{ type: 'refactor', section: '代码重构' }、{ type: 'docs', section: '文档更新' }、{ type: 'test', section: '测试' },并将 chore 设为 { type: 'chore', section: '构建/工具', hidden: true }、ci 设为 { type: 'ci', section: '持续集成', hidden: true }、style 设为 { type: 'style', section: '代码格式', hidden: true };commitUrlFormat 设为 '{{host}}/{{owner}}/{{repository}}/commit/{{hash}}';compareUrlFormat 设为 '{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}'。
  34. commitlint 中文配置:安装 @commitlint/cli 和 @commitlint/config-conventional,命令为 npm install -D @commitlint/cli @commitlint/config-conventional。
  35. 配置 commitlint.config.js:extends 设为 ['@commitlint/config-conventional']。
  36. 配置 commitlint.config.js 的 rules:type-enum 设为 [2, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore', 'ci', 'revert']]。
  37. 配置 commitlint.config.js 的 rules:type-case 设为 [2, 'always', 'lower-case']。
  38. 配置 commitlint.config.js 的 rules:type-empty 设为 [2, 'never']。
  39. 配置 commitlint.config.js 的 rules:subject-empty 设为 [2, 'never']。
  40. 配置 commitlint.config.js 的 rules:subject-max-length 设为 [2, 'always', 100]。
  41. 配置 commitlint.config.js 的 rules:subject-case 设为 [0] 以允许中文字符并关闭限制。
  42. 配置 commitlint.config.js 的 rules:header-max-length 设为 [2, 'always', 120](放宽中文占宽)。
  43. 配置 commitlint.config.js 的 rules:body-max-line-length 设为 [1, 'always', 200](警告级)。
  44. 配置 commitlint.config.js 的 rules:footer-max-line-length 设为 [1, 'always', 200](警告级)。
  45. 配置 commitlint.config.js 的 prompt.messages 为中文:type 为 '选择提交类型:';scope 为 '输入影响范围(可选):';subject 为 '填写简短描述:';body 为 '填写详细描述(可选,使用 "|" 换行):';breaking 为 '列出不兼容变更(可选):';footer 为 '关联的 Issue(可选,例如 #123):';confirmCommit 为 '确认提交以上信息?'。
  46. husky + lint-staged 集成:安装 husky 和 lint-staged,命令为 npm install -D husky lint-staged;运行 npx husky init。
  47. 配置 .husky/commit-msg 钩子:写入 npx --no -- commitlint --edit "$1"。
  48. 配置 .husky/pre-commit 钩子:写入 npx lint-staged。
  49. 配置 lint-staged(package.json):*.{js,ts,jsx,tsx,vue} 执行 eslint --fix 和 prettier --write;*.{css,scss,less} 执行 stylelint --fix 和 prettier --write;*.md 执行 prettier --write。
  50. 可选交互式提交:安装 commitizen 和 cz-conventional-changelog,命令为 npm install -D commitizen cz-conventional-changelog;在 package.json 中设置 config.commitizen.path 为 cz-conventional-changelog,添加脚本 commit 为 cz;运行 npm run commit 进入交互式提交引导。
  51. 提交前自查:type 是否正确选择(feat/fix/docs/...)。
  52. 提交前自查:scope 是否准确描述了影响模块。
  53. 提交前自查:subject 是否为动宾短语且不超过 50 字符。
  54. 提交前自查:subject 末尾是否去掉了句号。
  55. 提交前自查:body 是否说明了变更原因和方案。
  56. 提交前自查:不兼容变更是否标注了 BREAKING CHANGE。
  57. 提交前自查:相关 Issue 是否已关联。
  58. 提交前自查:一次提交是否只做了一件事(原子性)。
  59. 团队落地步骤:1. 工具链配置:按上述步骤配置 commitlint + husky,让规范可执行。
  60. 团队落地步骤:2. 模板共享:将 .commitlintrc、.husky/ 等配置提交到仓库。
  61. 团队落地步骤:3. 团队培训:组织 15 分钟的规范说明会,演示工具使用。
  62. 团队落地步骤:4. Code Review:Review 时关注 commit message 质量。
  63. 团队落地步骤:5. 持续迭代:每季度回顾规范执行情况,根据团队反馈调整。
  64. 常见问题:中英文混排时空格处理:中文与英文/数字之间加一个空格,如「添加 Redis 缓存」。
  65. 常见问题:scope 用中文还是英文:团队内统一即可,推荐中文(可读性好),但需在 commitlint 中关闭 scope-case 检查。
  66. 常见问题:多人协作时如何保证规范一致:靠工具而非靠自觉,配置好 husky + commitlint,不符合规范的提交会被拦截。

适用边界 · 注意事项