约定式提交

部分内容参考自约定式提交的官方网站,在原文基础上有一定修改。

什么是约定式提交?

约定式提交规范是一种基于提交信息的轻量级约定,换句话说,它规定了你应该用什么格式写提交信息。

一段符合约定式提交的 git log 看起来是这样的(来自 unocss):

* 1762ef93 - (tag: v0.33.3) release v0.33.3
* 7b3b8a97 - chore: update deps
* eccaed9d - chore: bump pnpm
* a1fac007 - feat(vite): support build watch mode (#963)
* fa1e8202 - fix(vite): emit better warning in build (#961)
* 89003436 - feat(preset-mini): add break-spaces to white-space (#962)
* b0fd9a83 - feat(vscode): support loading from iles.config file (#956)
* bcaa6eed - docs: update
* 6e6f07e5 - docs: update features
* 31a24fd1 - (tag: v0.33.2) release v0.33.2
* d2d0c497 - chore: lint
* d051b5c0 - feat(compile-class): new transformer (#950)
* 10c0ae28 - docs: fix query loading
* 59403676 - (tag: v0.33.1) release v0.33.1

为什么要使用约定式提交?

  • 自动化生成 CHANGELOG。
  • 基于提交的类型,自动决定语义化的版本变更。
  • 向同事、公众与其他利益关系者传达变化的性质。
  • 触发构建和部署流程。
  • 让人们探索一个更加结构化的提交历史,以便降低对你的项目做出贡献的难度。

约定式提交的格式是怎样的?

一般格式

对于单行提交,约定式提交的格式是这样的:

type(scope): description

对于多行提交,约定式提交的格式是这样的:

type(scope): description

body

footers

其中,type 是提交做出更改的类型,它可以为:

  • fix:表示在代码库中修复了一个 bug(这和语义化版本中的 PATCH 相对应)。
  • feat:表示在代码库中新增了一个功能(这和语义化版本中的 MINOR 相对应)。
  • fix:feat: 之外,也可以使用其它提交类型,例如 @commitlint/config-conventional(基于 Angular 约定)中推荐的 build:chore:ci:docs:style:refactor:perf:test:,等等。

scope 是此次更改涉及到的项目子模块范围。如果不能明确,这一部分可以省略。

description 是描述此次更改的简短描述。

破坏性更改

当提交的内容包含破坏性更改时,必须在描述中指出,例如:

feat!: send an email to the customer when a product is shipped
feat: allow provided config object to extend other configs

BREAKING CHANGE: `extends` key in config file is now used for extending other config files

在冒号前面加上 ! ,或者在脚注中表明 BREAKING CHANGE,就表示此次更改是破坏性更改。

约定式提交的正式规范

详见官方网站