约定式提交
部分内容参考自约定式提交的官方网站,在原文基础上有一定修改。
什么是约定式提交?
约定式提交规范是一种基于提交信息的轻量级约定,换句话说,它规定了你应该用什么格式写提交信息。
一段符合约定式提交的 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
,就表示此次更改是破坏性更改。
约定式提交的正式规范
详见官方网站。