The commit message should be structured as follows:
(emoji) <type>[optional scope]: <description>
[optional body]
[optional footer(s)]
The commit contains the following structural elements, to communicate intent to the consumers of your library:
- fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning).
- feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning).
- BREAKING CHANGE: a commit that has a footer BREAKING CHANGE:, or appends a ! after the type/scope, introduces a breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any type.
- types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the the Angular convention) recommends build:, chore:, ci:, docs:, style:, * refactor:, perf:, test:, and others.
- footers other than BREAKING CHANGE: may be provided and follow a convention similar to git trailer format.
Additional types are not mandated by the Conventional Commits specification, and have no implicit effect in Semantic Versioning (unless they include a BREAKING CHANGE). A scope may be provided to a commit’s type, to provide additional contextual information and is contained within parenthesis, e.g., feat(parser): add ability to parse arrays.
Fork and modify to suit your needs. Don't forget to "star" and share the love.
Text | Image | GFM shortcode* | Windows 10 picker name | When to use it |
---|---|---|---|---|
🎉 |
🎉 | :tada: |
party popper |
initial commit |
✨ |
✨ | :sparkles: |
sparkles |
when adding a new user-facing feature |
🎨 |
🎨 | :art: |
artist palette |
when improving UI |
📦 |
📦 | :package: |
package |
when refactoring or improving code |
🐎 |
🐎 | :racehorse: |
horse |
when improving performance |
🔒 |
🔒 | :lock: |
locked |
when improving security |
🔧 |
🔧 | :wrench: |
wrench |
when updating configs |
♿ |
♿ | :wheelchair: |
wheelchair symbol |
when improving accessibility |
🚀 |
🚀 | :rocket: |
rocket |
when improving dev tools |
📝 |
📝 | :pencil: |
pencil |
when writing docs (e.g. README, code comments) |
💎 |
💎 | :gem: |
gem stone |
when cutting a new release / version bump |
🐛 |
🐛 | :bug: |
bug |
when fixing a bug |
💥 |
💥 | :boom: |
collision |
when fixing a crash |
🚱 |
🚱 | :non-potable_water: |
non-potable water |
when fixing a memory leak |
🔥 |
🔥 | :fire: |
fire |
when removing code or files |
✅ |
✅ | :white_check_mark: |
check mark button |
when adding new tests |
💚 |
💚 | :green_heart: |
green heart |
when fixing the CI build |
👕 |
👕 | :shirt: |
t-shirt |
when fixing linter warnings |
📡 |
📡 | :satellite: |
satellite antenna |
when adding instrumentation or metrics |
🔊 |
🔊 | :loud_sound: |
speaker high volume |
when adding logging |
🔇 |
🔇 | :mute: |
muted speaker |
when removing logging |
⬆ |
⬆️ | :arrow_up: |
up arrow |
when upgrading dependencies |
⬇ |
⬇️ | :arrow_down: |
down arrow |
when downgrading dependencies |
🎌 |
🎌 | :crossed_flags: |
crossed flags |
when adding an A/B test or feature flag** |
⚡ |
⚡ | :zap: |
high voltage |
when making a backwards-incompatible change** |
🚧 |
🚧 | :construction: |
construction |
when the change is a work in progress (do not merge)** |
🔧 feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
✨ feat!: send an email to the customer when a product is shipped
✨ feat(api)!: send an email to the customer when a product is shipped
💎 chore!: drop support for Node 6
BREAKING CHANGE: use JavaScript features not available in Node 6.