Skip to main content

Command Palette

Search for a command to run...

拥抱 Conventional Commits:让你的代码提交信息更有价值

Updated
2 min readView as Markdown

在日常的编码过程中,版本控制软件是我们不可或缺的伙伴。每一次的代码提交,都像是为项目留下一个重要的“时间戳”,记录着我们在上线或其他关键操作时所做的修改。然而,当项目团队不断壮大,或者项目本身变得日益庞大复杂时,随意编写的 Commit 信息,哪怕在自己看来清晰明了,也可能给团队协作带来不便。

为了解决这一痛点,我接触到了一个非常有价值的规范——Conventional Commits (约定式提交)。它提供了一套清晰、简洁的指引,旨在将每一次提交转化为有意义、结构化的信息单元,从而显著提升 Commit Log 的价值和可利用性。

Conventional Commits 规范详解

Conventional Commits 规范为每次提交定义了如下的标准结构:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

这个结构包含了几个关键要素:

  • Type (类型)必须遵循的指引**,表明提交的性质。规范定义了以下基础类型:
    • fix:修复 Bug(对应 SemVer 的 PATCH 版本更新)。
    • feat:引入新功能(对应 SemVer 的 MINOR 版本更新)。
    • 鼓励扩展:团队可以根据需要定义其他类型,如 buildchore(用于标记常规维护工作,如更新依赖项)、cidocsstylerefactorperftest 等,以适应具体的工作流。这些扩展类型本身通常不直接影响版本号(除非包含破坏性变更)。
  • Scope (范围):可选但推荐的指引,用于明确提交影响的代码区域或模块,用括号包裹,如 feat(api):fix(tools):。这极大地增强了信息的可定位性。
  • Description (描述):必须遵循的指引,紧跟在冒号和空格之后,用简洁的语言(推荐使用祈使句的现在时态)概括本次提交的核心变更内容。这是提交信息的“标题”。
  • Body (正文):可选指引,当简短描述不足以说明时,提供更详细的上下文、动机和实现细节。与 Description 之间需要空一行。
  • Footer(s) (脚注):可选指引,提供元数据,如关联的 Issue(例如 Refs: #123)。特别重要的两个脚注指引:
    • BREAKING CHANGE:明确标示不兼容的 API 变更(对应 SemVer 的 MAJOR 版本更新)。
    • INITIAL STABLE RELEASE:标记项目从 0.y.z 版本进入 1.0.0 稳定版。

强调重要变更的简化指引: 规范还提供了 !(紧跟 type 或 scope 之后)和 !! 作为标记 BREAKING CHANGEINITIAL STABLE RELEASE 的快捷方式,进一步简化了实践。

示例展示

以下是一些遵循 Conventional Commits 规范的提交示例:

  • 修复简单的 BUG

      fix: correct username validation logic
    
  • 带有范围的新功能

      feat(api): add user profile endpoint
    
  • 使用 ! 标记破坏性变更

      refactor!(auth): remove deprecated JWT authentication
    
  • 包含详细正文和脚注的提交

      perf(api): improve user query performance significantly
    
      Implemented a new indexing strategy for the users table and optimized
      the SQL query execution plan. Initial tests show a 50% reduction
      in average query latency under heavy load.
    
      Reviewed-by: Alice <alice@example.com>
      Refs: #456, #478
    
  • 使用 !! 标记首次稳定版发布

      chore(release)!!: prepare for 1.0.0 stable release
    
      Finalized documentation, updated dependencies, and ran comprehensive
      end-to-end tests to ensure stability for the first major release.
    
      BREAKING CHANGE: The project is now considered stable for production use.
    

通过遵循上述规范,你的 Commit 信息将转化为清晰、信息丰富的记录。

遵循 Conventional Commits 的收益

采纳 Conventional Commits 规范,对日常开发和团队协作能带来诸多好处:

  • 提升可读性与理解性TypeScope 能够让你快速筛选和定位信息,清晰的 DescriptionBody 阐述了变更的“什么”和“为什么”。
  • 增强团队沟通与协作:统一的格式减少了误解,提高了代码审查和协作效率,让每一次提交都成为清晰的沟通。
  • 简化历史追溯与问题排查:结构化的日志便于查找特定功能引入、Bug 修复或破坏性变更的源头。
  • 驱动自动化流程:有意义的提交日志是自动化工具的理想输入,能够驱动自动化生成 CHANGELOG、自动判断 SemVer 版本,以及基于提交类型触发不同的 CI/CD 流程。

Conventional Commits 的最佳实践与洞察

  • 原子化提交:鼓励将复杂的变更分解为多个逻辑上独立的、遵循单一 type 的提交。这是良好的 Git 实践,Conventional Commits 进一步强化了这一点。
  • 选择最合适的 Type:当一次提交包含多种类型的变更时(应尽量避免),选择最能代表其核心意图的 type,并在 Body 中详述其他变更。
  • 使用祈使句现在时:推荐使用如 “Add feature”、“Fix bug” 的风格撰写 Description,简洁、直接,如同给代码库下达指令。
  • 善用工具辅助:社区提供了丰富的工具(如 Commitizen, commitlint 等)来帮助开发者遵循规范格式,并在提交前进行校验,降低遵循规范的门槛。
  • 团队共识与逐步采纳:引入规范需要团队达成共识。可以通过分享、讨论和使用工具逐步推广。

强大的工具支持

有了 Conventional Commits 规范,以下工具可以极大地提升开发效率:

  • Commitizen:一款交互式命令行工具,引导用户创建符合规范的提交信息。
  • Commitlint:用于校验提交信息是否符合规范,通常与 Git Hooks(如 husky)集成。
  • IDE 插件:主流 IDE(如 VS Code, JetBrains IDEs 等)均有插件提供模板、补全和校验支持。
  • 自动化版本与 Changelog 工具:如 semantic-release, goreleaser/chglog 等,它们能够消费符合规范的提交历史,实现自动化版本发布和 Changelog 生成。

AI 赋能 Commit 信息生成:近年来,AI 的飞速发展也为 Commit 信息生成带来了新的可能。不少编辑器和工具已经集成了 AI 功能,能够根据你的代码修改生成建议的 Commit 信息,这在我的使用体验中也相当不错。

参考资料

补充说明

上面的文章是我写的之后,AI 帮助我进行了润色。

3 views

More from this blog

Upgit 图片管理实战:为 Markdown 博客带来极致高效的图片管理体验

在博客写作的过程中,图片管理是提升效率和内容质量的关键环节。Upgit 作为高效、跨平台的文件上传工具,可以帮助博客创作者将图片便捷地上传至 GitHub,并生成可直接引用的外链,特别适合以 Markdown 写作为核心的写作流程。 Upgit 是一款开源的文件上传工具,项目地址:https://github.com/pluveto/upgit。它能将图片、文档等文件快速上传到 GitHub、Gitee、CDN 以及各类网盘,自动生成直链,特别适合 Markdown 写作、博客创作和团队协作等场...

Oct 5, 20252 min read2

工作日快充信息法宝:Kagi News 和 Huxe 推荐

最近用了一下两个新出的信息工具,体验下来感受挺不一样,整理一下分享给大家:如何用更高效、更智能的方式,每天花极少时间就能掌握需要的信息。 Kagi News Kagi News 是一个主打高效的新闻工具。每天只需要花几分钟,就能快速浏览全球范围内的关键新闻,而且每条内容都带有不同观点和来源。 App Store:https://apps.apple.com/us/app/kagi-news/id6748314243 网页版:https://kite.kagi.com/ 体验亮点: ...

Sep 27, 20251 min read9
工作日快充信息法宝:Kagi News 和 Huxe 推荐

GLM 4.5 配置全攻略:Claude Code 与 Codex 实战指南

简介 智谱最新推出的 GLM 4.5 是一款面向编程和智能应用的通用大模型,相比前一代在代码生成、复杂推理、对话体验等方面有了显著提升。它不仅支持在交互式编程中作为助手使用,还可以集成到 Claude Code 和 Codex 工具中,帮助开发者更高效地完成编码、调试和文档处理等任务。 本文将介绍 GLM 4.5 在 Claude Code 和 Codex 中的配置方法,帮助你快速上手。目前智谱还推出了一个 “编程套餐” GLM Coding Plan,有限时优惠,基础版本 3 个月仅需 60 ...

Sep 27, 20251 min read45
GLM 4.5 配置全攻略:Claude Code 与 Codex 实战指南

我使用的工具:终端篇

作为一名开发者,终端(Terminal)是我们日常工作中接触最频繁的工具之一。它不仅是与操作系统交互的窗口,更是一个可以高度定制、提升效率的利器。在过去的几年里,我尝试了市面上许多主流和新兴的终端应用,从追求性能的 GPU 加速终端,到集成 AI 的新时代终端,各有千秋。 在这里,我想分享一下我个人使用过的终端工具,以及它们各自的特点和我的主观看法。 iTerm2 官网:https://iterm2.com/ 平台:macOS 特点:免费、开源 PS: 我接触 Mac 后使用时间最长的终...

Sep 13, 20253 min read9
我使用的工具:终端篇

Untitled Publication

42 posts

I want to share something.