Docs: update the commit message format to a modified version of the AngularJS commit message style
This commit is contained in:
parent
9c9da44341
commit
80f8c1709f
|
@ -1,29 +1,111 @@
|
|||
# Commit message style
|
||||
*This specification is heavily inspired by the [AngularJS commit message format][https://github.com/angular/angular/blob/main/CONTRIBUTING.md#-commit-message-format].*
|
||||
|
||||
Commit messages have to align with the following style:
|
||||
We have very precise rules over how our Git commit messages must be formatted.
|
||||
This format leads to **easier to read commit history**.
|
||||
|
||||
`<type> (<space>): <change>`
|
||||
Each commit message consists of a **header**, a **body** (optional), and a **footer** (optional).
|
||||
|
||||
Pull requests that don't align with this style probably won't be accepted.
|
||||
|
||||
## type
|
||||
The type of change to be committed.
|
||||
```
|
||||
<header>
|
||||
<BLANK LINE>
|
||||
<body>
|
||||
<BLANK LINE>
|
||||
<footer>
|
||||
```
|
||||
|
||||
Possible values:
|
||||
- __feature__ - When you added a new feature or functionality.
|
||||
- __fix__ - When you fixed a bug or stuff like that.
|
||||
- __docs__ - When you wrote documentation or changed the readme. The space field is optional here.
|
||||
- __refactor__ - When you restructured the codebase / parts of it. The space field is optional here.
|
||||
The `header` is mandatory and must conform to the _Commit Message Header format_ (described below).
|
||||
|
||||
If your commit has multiple types, think about splitting it into multiple commits.
|
||||
This helps others (and you) to understand changes in retrospect.
|
||||
The `body` is mandatory for all commits that are not 100% self explainatory.
|
||||
When the body is present it must be at least 20 characters long and must conform to the _Commit Message Body format_.
|
||||
|
||||
## space
|
||||
The space that is affected by the commit.
|
||||
The `footer` is optional. The _Commit Message Footer format_ (described below) describes what the footer is used for and the structure it must have.
|
||||
|
||||
## change
|
||||
What you've changed. / The actual commit message.
|
||||
|
||||
# Examples
|
||||
- `feature (AHCI): implemented port initialization`
|
||||
- `fix (processes): changed process spawning to copy the null terminator at the end of the name`
|
||||
## Commit Message Header
|
||||
|
||||
```
|
||||
<type>(<scope>): <short summary>
|
||||
│ │ │
|
||||
│ │ └─⫸ Summary in present tense. Not capitalized. No period at the end.
|
||||
│ │
|
||||
│ └─⫸ Commit Scope: The name of the affected module.
|
||||
│
|
||||
└─⫸ Commit Type: Build|Docs|Feat|Fix|Perf|Refactor|Test|Merge
|
||||
```
|
||||
|
||||
The `<type>` and `<summary>` fields are mandatory, the `(<scope>)` field is optional.
|
||||
|
||||
|
||||
### type
|
||||
|
||||
Must be one of the following:
|
||||
|
||||
* **Build**: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
|
||||
* **Docs**: Documentation only changes
|
||||
* **Feat**: A new feature
|
||||
* **Fix**: A bug fix
|
||||
* **Perf**: A code change that improves performance
|
||||
* **Refactor**: A code change that neither fixes a bug nor adds a feature
|
||||
* **Test**: Adding missing tests or correcting existing tests
|
||||
* **Merge**: A merging commit
|
||||
|
||||
### Scope
|
||||
The scope should be the name of the module affected (as perceived by the person reading the changelog generated from commit messages).
|
||||
|
||||
Specify submodules if needed!
|
||||
|
||||
Example scopes:
|
||||
|
||||
* `app::events`
|
||||
* `ui`
|
||||
|
||||
When a commit affects the whole tree, use `treewide`.
|
||||
|
||||
### Summary
|
||||
|
||||
Use the summary field to provide a succinct description of the change:
|
||||
|
||||
* use the imperative, present tense: "change" not "changed" nor "changes"
|
||||
* don't capitalize the first letter
|
||||
* no dot (.) at the end
|
||||
|
||||
|
||||
## Commit Message Body
|
||||
|
||||
Just as in the summary, use the imperative, present tense: "fix" not "fixed" nor "fixes".
|
||||
|
||||
Explain the motivation for the change in the commit message body. This commit message should explain _why_ you are making the change.
|
||||
You can include a comparison of the previous behavior with the new behavior in order to illustrate the impact of the change.
|
||||
|
||||
This is not needed, if the summary is 100% self-explainatory.
|
||||
|
||||
## Commit Message Footer
|
||||
|
||||
The footer can contain information about breaking changes and deprecations and is also the place to reference issues and other PRs that this commit closes or is related to.
|
||||
For example:
|
||||
|
||||
```
|
||||
BREAKING CHANGE: <breaking change summary>
|
||||
<BLANK LINE>
|
||||
<breaking change description + migration instructions>
|
||||
<BLANK LINE>
|
||||
<BLANK LINE>
|
||||
Fixes #<issue number>
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```
|
||||
DEPRECATED: <what is deprecated>
|
||||
<BLANK LINE>
|
||||
<deprecation description + recommended update path>
|
||||
<BLANK LINE>
|
||||
<BLANK LINE>
|
||||
Closes #<pr number>
|
||||
```
|
||||
|
||||
Breaking Change section should start with the phrase "BREAKING CHANGE: " followed by a summary of the breaking change, a blank line, and a detailed description of the breaking change that also includes migration instructions.
|
||||
|
||||
Similarly, a Deprecation section should start with "DEPRECATED: " followed by a short description of what is deprecated, a blank line, and a detailed description of the deprecation that also mentions the recommended update path.
|
||||
|
|
Reference in New Issue