branch-commit-msg
Overview
branch-commit-msg
is a git commit-msg hook that extracts a configurable regex pattern from the current branch and reformats the final commit message to the configured format.
Installation
With no dependency:
$ npx branch-commit-msg install
With husky:
$ npm install -D branch-commit-msg
$ npx husky add .husky/commit-msg 'npx branch-commit-msg-hook "$1"'
Uninstall
With no dependency:
$ rm .git/hooks/commit-msg
With husky:
Remove npx branch-commit-msg-hook "$1"
from .husky/commit-msg
and run:
$ npm uninstall branch-commit-msg
Usage
After installation, create a .commitmsgrc.json
file at the root of your project and configure how you would like to reformat your final commit message based on elements of the active branch name:
// .commitmsgrc.json
{
/*
Regex group pattern to extract from branch name.
- ex: "(sc)-?[0-9]+"
*/
"extractPattern": string,
/*
Whether the extractPattern is case-sensitive.
- ex: true
*/
"extractPatternMatchCase": boolean,
/*
Final output format for the commit message.
Formatting Placeholders:
%b0: access the entire matched pattern from the branch name
%b1: access the first matched group pattern from the branch name
%bn: access the 'n'th matched group pattern from the branch name
- ex: "%b6" accesses the 6th matched group pattern
%m: the original commit message
Pipes:
lower: applies lower casing to the formatting placeholder
- ex: "$b2 | lower"
upper: applies upper casing to the formatting placeholder
- ex: "%m | upper"
*/
"commitMsgFormat": string
}
After your .commitmsgrc.json
is configured, start making commits!
Configuration Examples
Shortcut ticket number:
Preface commit message with a{
"extractPattern": "sc-[0-9]+",
"extractPatternMatchCase": false,
"commitMsgFormat": "%b0 - %m"
}
# Current branch: SC-123456/my-new-feature
$ git commit -m "added a thing"
$ git log -1 --pretty=%B
# Output: SC-123456 - added a thing
JIRA ticket:
Suffix and format a commit message with a{
"extractPattern": "SOMEPRJ-[0-9]+",
"extractPatternMatchCase": false,
"commitMsgFormat": "%m (%b0 | upper)"
}
# Current branch: feature/someprj-123456
$ git commit -m "added a thing"
$ git log -1 --pretty=%B
# Output: added a thing (SOMEPRJ-123456)
Go crazy with group matching:
{
"extractPattern": "(some).*(complex[0-9-]+).*(branch)",
"extractPatternMatchCase": false,
"commitMsgFormat": "%m | upper to %b1 | upper %b2 %b3 | lower"
}
# Current branch: some/CoMpLEX-123-5/BRANCH
$ git commit -m "added a thing"
$ git log -1 --pretty=%B
# Output: ADDED A THING to SOME CoMpLEX-123-5 branch
Development
Prerequisites
- Docker installation (for integration and end-to-end (e2e) testing)
- Node.js (>=14.0.0) runtime
- Yarn installation
Install Dependencies
$ yarn install
Test
$ yarn test[:unit|:integration|:e2e|:smoke]
Build
$ yarn build