Enforce a Git Commit Message Format
Enforce a git commit message format for your project.
Updated: 28 Aug 2017 to use commitmsg hook. Thanks to marionebl.
Power of a Convention
You could choose any format. One git commit message format that I like is conventional commits. With a convention, you can generate a changelog or use tools like lerna to automatically determine what package versions to publish.
Commitlint
In order to get the automation benefits, the commits have to be consistent and predictable. You need to ensure they follow the convention. There are a few tools that do this. One nice one is Commitlint.
Using this tool you can set one of about 2 dozen rules about your commit message. These coincide nicely with conventional commit message segments.
You can run commitlint via cli:
npm install @commitlint/cli
echo "Some commit message" | commitlint
Checking Message on Commit
However, you're not usually going to want to run the cli on an echoed string. We want to write a commit message in our regular git workflow, it would fail the formatting check, and you'd be denied the privelege to commit until you'd committed with a well-formatted message.
To do this you'll want a package that helps you handle commit hooks:
npm install husky --save-dev
And add a script to package.json
:
"scripts": {
"commitmsg": "commitlint -e $GIT_PARAMS",
}
Using the -e
flag, commitlint
will automatically go to the COMMIT_EDITMSG
, your latest commit message, to do its linting.
In the case of bad commit, you'll get the errors telling you what formatting rules you need to fix to let your commit through.
How do you ensure a conventional commit message format on your projects?