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.
With no dependency:
npx branch-commit-msg install
With husky:
npm install -D branch-commit-msg echo 'npx branch-commit-msg-hook "$1"' > .husky/commit-msg
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
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!
Preface commit message with a Shortcut ticket number:
{
"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
Suffix and format a commit message with a JIRA ticket:
{
"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)
{
"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
- Docker installation (for integration and end-to-end (e2e) testing)
- Node.js (LTS) runtime
- Yarn installation
$ yarn install
$ yarn test[:unit|:integration|:e2e|:smoke]
$ yarn build