Git commit messages
Each commit message consists of a header, a body, and a footer.
<type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>
Header
The header is mandatory and the scope is optional.
Type
Must be one of the following:
- feat: introduces a new feature to the codebase
- fix: patches a bug in your codebase
- refactor: improves the code without changing functionality
- BREAKING CHANGE: major version
Additional types:
- build: a change that affects the build system or external dependencies
- chore: same as build but chore is preferred, also any change that doesn’t fit in any other type
- ci: changes to the CI configuration
- docs: changes to the documentation
- style: white-space, formatting, semi-colons, etc.
- perf: performance improvements
- test: adding or fixing tests
Scope
The scope can be empty. Scope can be any of these:
- category, part or section of the codebase we are affecting, e.g.: api, client, tooling
- a specific package, library or dependency,e.g.: moment.js, requests
- a ticket number in case the current commit doesn’t close it, e.g.: chore(123): update dependencies
Subject
Short (50 chars or less) summary of the change:
- use the imperative, present tense: “change” not “changed”
- don’t capitalize the first letter
- no dot (.) at the end
Footer
The footer should contain a closing reference to an issue if any and breaking changes.
Closes #123, #345BREAKING CHANGE:IE6 not supported anymore.
Semantic versioning
Conventional commits are designed to work with Semantic versioning.
- feat: minor version
- fix: patch version
- BREAKING CHANGE: major version
Examples
Add a new feature without breaking existing functionality. This bumps a minor version, e.g.: 1.2.0 to 1.3.0.
feat: add search for transactions
Add new React component for searching transactions with autocompletion.
Include tests.
Closes #123, #234
Fix a bug. This bumps a patch version, e.g.: 1.3.0 to 1.3.1.
bug(api): add correct status code for existing resources
We return `409` when trying to create a user with an existing email.
Closes #453
Add new feature that breaks existing functionality. This bumps a major version, e.g.: 1.3.1 to 2.0.0.
feat!: add bank sync
This replace CSV import and use Plaid to connect to people's banks.
Closes #423, #424, #425
BREAKING CHANGE:People won't be able to import transactions using CSV. Only Bank Sync is available.
Resources
https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines
https://stackoverflow.com/a/71778941
https://karma-runner.github.io/0.10/dev/git-commit-msg.html
https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
https://sparkbox.com/foundry/semantic_commit_messages
https://softwareengineering.stackexchange.com/questions/431132/how-can-i-write-good-conventional-commit-style-commit-messages-for-one-feature-o
https://www.conventionalcommits.org/en/v1.0.0/#summary