2017-06-17 18:16:40 +08:00
## Git Commit Message Convention
2018-03-09 01:00:11 +08:00
> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular).
2017-06-17 18:16:40 +08:00
2018-01-06 23:08:47 +08:00
#### TL;DR:
Messages must be matched by the following regex:
``` js
2018-03-08 23:32:42 +08:00
/^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/
2018-01-06 23:08:47 +08:00
```
2017-06-17 18:16:40 +08:00
#### Examples
2017-07-01 11:29:36 +08:00
Appears under "Features" header, `compiler` subheader:
2017-06-17 18:16:40 +08:00
```
2017-07-01 11:29:36 +08:00
feat(compiler): add 'comments' option
2017-06-17 18:16:40 +08:00
```
2017-07-01 11:29:36 +08:00
Appears under "Bug Fixes" header, `v-model` subheader, with a link to issue #28:
2017-06-17 18:16:40 +08:00
```
2017-07-01 11:29:36 +08:00
fix(v-model): handle events on blur
2017-06-17 18:16:40 +08:00
close #28
```
Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
```
2017-07-01 11:29:36 +08:00
perf(core): improve vdom diffing by removing 'foo' option
2017-06-17 18:16:40 +08:00
2017-07-01 11:29:36 +08:00
BREAKING CHANGE: The 'foo' option has been removed.
2017-06-17 18:16:40 +08:00
```
The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.
```
2017-07-01 11:29:36 +08:00
revert: feat(compiler): add 'comments' option
2017-06-17 18:16:40 +08:00
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
```
### Full Message Format
A commit message consists of a **header** , **body** and **footer** . The header has a **type** , **scope** and **subject** :
```
< type > (< scope > ): < subject >
< BLANK LINE >
< body >
< BLANK LINE >
< footer >
```
The **header** is mandatory and the **scope** of the header is optional.
### Revert
2019-03-05 00:53:59 +08:00
If the commit reverts a previous commit, it should begin with `revert: ` , followed by the header of the reverted commit. In the body, it should say: `This reverts commit <hash>.` , where the hash is the SHA of the commit being reverted.
2017-06-17 18:16:40 +08:00
### Type
2019-03-05 00:53:59 +08:00
If the prefix is `feat` , `fix` or `perf` , it will appear in the changelog. However, if there is any [BREAKING CHANGE ](#footer ), the commit will always appear in the changelog.
2017-06-17 18:16:40 +08:00
Other prefixes are up to your discretion. Suggested prefixes are `docs` , `chore` , `style` , `refactor` , and `test` for non-changelog related tasks.
### Scope
2019-03-05 00:53:59 +08:00
The scope could be anything specifying the place of the commit change. For example `core` , `compiler` , `ssr` , `v-model` , `transition` etc...
2017-06-17 18:16:40 +08:00
### Subject
2019-03-05 00:53:59 +08:00
The subject contains a succinct description of the change:
2017-06-17 18:16:40 +08:00
* use the imperative, present tense: "change" not "changed" nor "changes"
2019-03-05 00:53:59 +08:00
* don't capitalize the first letter
2017-06-17 18:16:40 +08:00
* no dot (.) at the end
### Body
Just as in the **subject** , use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to
reference GitHub issues that this commit **Closes** .
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.