[!TIP] Also have a look at Git Conventional Commits Cheat Sheet
see CHANGELOG.md
npx git-conventional-commits <command>
ℹ add help parameter -h
to commands to list all possible options
init [options] create a config file template `git-conventional-commits.yaml`
version [options] determine version from conventional commits
changelog [options] generate change log from conventional commits
commit-msg-hook [options] <commit-msg-file> check for conventional commit message format
npx git-conventional-commits init
git-conventional-commits.yaml
to your needsExample git-conventional-commits.yaml
---
convention:
commitTypes:
- feat
- fix
- perf
- refactor
- style
- test
- build
- ops
- docs
- merge
commitScopes: []
releaseTagGlobPattern: v[0-9]*.[0-9]*.[0-9]*
changelog:
commitTypes:
- feat
- fix
- perf
- merge
includeInvalidCommits: true
commitScopes: []
commitIgnoreRegexPattern: "^WIP "
headlines:
feat: Features
fix: Bug Fixes
perf: Performance Improvements
merge: Merges
breakingChange: BREAKING CHANGES
commitUrl: https://github.com/qoomon/git-conventional-commits/commit/%commit%
commitRangeUrl: https://github.com/qoomon/git-conventional-commits/compare/%from%...%to%?diff=split
issueRegexPattern: "#[0-9]+"
issueUrl: https://github.com/qoomon/git-conventional-commits/issues/%issue%
convention
commitTypes
an array of expected commit types["feat", "fix", "doc", "style"]
commitScopes
an array of expected commit types["ui", "database"]
releaseTagGlobPattern
glob pattern to filter for release tags[0-9]+\.[0-9]+\.[0-9]+
)*
issueRegexPattern
regex pattern to find issue IDs[A-Z]{3,}-\\d+
changelog
commitTypes
filter commits by typeconvention.commitTypes
plus
merge
commits["feat", "fix", "merge"]
commitScopes
filter commits by scopesconvention.commitScopes
["ui"]
includeInvalidCommits
include commits without valid type: default: true
commitTypes
will be removed from changelog commitIgnoreRegexPattern
filter commits by commit subject regex^WIP
headlines
a map of headline identifier and actual headlinechangelog.commitTypes
plus
breakingChange
Breaking Changes Section{ "feat": "Features", "fix": "Bug Fixes", "breakingChange": "BREAKING CHANGES"}
{ "feat": "Features", "fix": "Bug Fixes", "merge": "Merges", "breakingChange": "BREAKING CHANGES"}
commitUrl
an URL template for generating markdown links to repository commits%commit%
commit hash placeholderhttps://github.com/qoomon/git-conventional-commits/commit/%commit%
issueUrl
an URL template for generating markdown links to an issue tracker%issue%
issue id placeholderhttps://jira.example.org/browse/%issue%
To automatically validate commit messages, a git hook can be used in the commit-msg
stage.
The hook can be created either manually or using the pre-commit framework.
.pre-commit-config.yaml
file in the root directory of your repository with following content.
repos:
- repo: https://github.com/qoomon/git-conventional-commits
rev: <RELEASE_TAG>
hooks:
- id: conventional-commits
pre-commit
framework pip install pre-commit
pre-commit install -t commit-msg
Setup Commit Message Hook to
cd <repository-path>
mkdir .git-hooks
git config core.hooksPath .git-hooks
touch .git-hooks/commit-msg && chmod +x .git-hooks/commit-msg
Open .git-hooks/commit-msg
with your favorite editor and paste following script
#!/bin/sh
# fix for windows systems
PATH="/c/Program Files/nodejs:$HOME/AppData/Roaming/npm/:$PATH"
npx git-conventional-commits commit-msg-hook "$1"
.git-hooks/commit-msg
to repository
[!IMPORTANT] Whenever you clone your repository with git hooks you need to enable git hooks once again
git config core.hooksPath .git-hooks
git-conventional-commits
npx git-conventional-commits version
git commit -am'build(release): bump project version to <version>'
npx git-conventional-commits changelog --release <version> --file 'CHANGELOG.md'
git commit -am'docs(release): create <version> change log entry'
git tag -a -m'build(release): <version>' '<version-prefix><version>'
git push
If you have an large existing repo with no release tags e.g. v1.0.0, or if you want the first changelog to be tidy, you need to create a release tag first.
git tag -a -m'build(release): 0.0.0' 'v0.0.0'
git push origin v0.0.0
This way npx git-conventional-commits
will only considre commits based on the commit the release tag is pointing at.npm install
npm test
npm login
npm publish