Git Conventional Commits: 提交信息规范化指南 – wiki大全

Git Conventional Commits: 提交信息规范化指南

在软件开发中,Git 提交历史是项目的重要组成部分。清晰、一致的提交信息不仅能帮助团队成员理解项目的演进,还能为自动化工具提供支持。Git Conventional Commits 规范(以下简称 Conventional Commits)正是为此而生,它提供了一套轻量级的约定,用于标准化提交信息格式。

什么是 Conventional Commits?

Conventional Commits 是一种对 Git 提交信息进行约定的规范。通过遵循特定的结构和类型,它使得提交历史变得可读、可搜索,并能被机器解析。这意味着,基于 Conventional Commits,我们可以自动生成更新日志、驱动语义化版本(Semantic Versioning)的发布,并简化代码审查过程。

核心结构

Conventional Commits 提交信息的基本结构如下:

“`
[optional scope]:

[optional body]

[optional footer(s)]
“`

让我们详细分解每个组成部分。

组成部分详解

1. type (类型)

type 是必需的,用于说明本次提交的性质。它应该是一个简短的描述性词语,例如:

  • feat: 新功能(feature)。当引入一个新功能时使用。
  • fix: 修复 bug。当修复了一个生产环境的 bug 时使用。
  • docs: 文档变更。仅限于文档的修改。
  • style: 样式修改。不影响代码逻辑的格式化、空格、分号等。
  • refactor: 代码重构。既不修复 bug 也不引入新功能的代码更改。
  • perf: 性能优化。提升代码性能的更改。
  • test: 测试。添加或修改测试用例。
  • chore: 日常事务。不涉及代码或测试文件修改的其他变更,例如构建过程、辅助工具或库的更改。
  • build: 构建系统或外部依赖的更改。例如 npmgulpbroccoliwebpack 的配置。
  • ci: CI/CD 相关的修改。例如 TravisJenkinsGitLab CI 配置文件的更改。
  • revert: 撤销先前的提交。

2. scope (作用域) (可选)

scope 是可选的,用于说明本次更改影响的范围或模块。它被包裹在括号中,紧跟在 type 之后。例如:feat(login):fix(parser):。这有助于更精确地定位受影响的代码区域。

3. description (描述)

description 是提交信息的简短总结,是必需的。它应该简洁明了,使用祈使句(现在时,例如“修复 bug”而不是“修复了 bug”),并且通常建议长度不超过 50 个字符。

4. body (正文) (可选)

body 是可选的,用于提供更详细的提交信息。如果 description 不足以说明本次提交的全部内容,可以在 body 中阐述本次更改的动机、实现细节以及可能产生的影响。bodydescription 之间应空一行。

5. footer(s) (页脚) (可选)

footer(s) 是可选的,用于放置与提交相关的额外信息,例如引用问题跟踪系统中的问题 ID,或者标记破坏性变更。

Breaking Changes (破坏性变更)

如果本次提交引入了破坏性变更(即会破坏现有 API 或功能,需要用户进行适配的更改),则必须在 type/scope 之后立即添加一个 !。同时,在 footer 部分,必须以 BREAKING CHANGE: 开头,详细描述破坏性变更的内容、原因以及如何进行迁移。

例如:
“`
feat(api)!: remove status endpoint

BREAKING CHANGE: The /api/status endpoint has been removed.
Please use /api/health for health checks instead.
“`

引用问题通常使用关键词,如 Closes #123Fixes JIRA-456

Conventional Commits 的优势

采用 Conventional Commits 规范能为项目带来诸多益处:

  • 提高可读性: 统一的格式使得提交历史一目了然,方便团队成员快速理解每次提交的目的。
  • 增强协作: 团队成员能更容易地识别相关更改,从而提高协作效率。
  • 自动化更新日志: 可以利用工具自动从提交历史中提取信息,生成结构化的更新日志(Change Log)。
  • 语义化版本控制: feat 类型通常对应次版本(Minor)升级,fix 类型对应修订版本(Patch)升级,而 BREAKING CHANGE 则意味着主版本(Major)升级,这为自动化发布提供了依据。
  • 优化代码审查: 审查者可以根据提交类型快速判断变更的性质,提高审查效率。
  • 简化贡献流程: 对于新贡献者而言,清晰的提交规范降低了参与项目的门槛。

最佳实践

在撰写 Conventional Commits 时,请遵循以下最佳实践:

  • 使用祈使句: descriptionbody 都应使用祈使语气(例如,“添加功能”而非“已添加功能”)。
  • 保持简洁明了: description 尽可能简短,body 则提供必要的上下文和细节。
  • 原子性提交: 每次提交应只包含一个逻辑上的变更,避免一次提交中混杂多个不相关的修改。

如何落地 Conventional Commits

要在团队中落地 Conventional Commits,可以采取以下措施:

  • 团队教育: 确保所有团队成员都理解并接受 Conventional Commits 规范。
  • 集成工具: 利用工具辅助规范的执行。例如,可以使用 Git Hook(如 commit-msg 钩子)来校验提交信息格式;使用 Commitizen 等工具引导用户生成符合规范的提交信息;使用 semantic-release 等工具实现自动化版本发布和更新日志生成。

结论

Conventional Commits 规范是管理 Git 提交历史的强大工具。通过引入结构化和一致性的提交信息,它极大地提升了项目的可维护性、可理解性和自动化潜力。采纳这一规范,将有助于您的团队构建更健康、更高效的开发工作流。

滚动至顶部