Skip to content

Instantly share code, notes, and snippets.

What would you like to do?

Automatically Prepend a Jira Issue ID to Git Commit Messages

Use a git hook to match a Jira issue ID from the current branch, and prepend it to every commit message

Assuming the current branch contains a Jira issue ID, you can use a git hook script to prepend it to every commit message.

  1. Create an empty commit-msg git hook file, and make it executable. From your project's root directory:

     install -b -m 755 /dev/null .git/hooks/commit-msg
  2. Save the following script to the newly-created .git/hooks/commit-msg file:


COMMIT_MSG=$(cat $1)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
JIRA_ID=$(echo "$CURRENT_BRANCH" | grep -Eo "[A-Z0-9]{1,10}-?[A-Z0-9]+-\d+")

if [ ! -z "$JIRA_ID" ]; then
    echo "JIRA ID '$JIRA_ID', matched in current branch name, prepended to commit message. (Use --no-verify to skip)"

But I'm Lazy

Me too! Here's a one-liner to install the hook above:

if [ -d .git/hooks ]; then HOOKF=.git/hooks/commit-msg && if [ ! -f $HOOKF ]; then TMPF=`date +%s`-ghook && curl -s > $TMPF && STARTL=`grep -n "scriptstart" $TMPF | head -1 | cut -d: -f1` && ENDL=`grep -n "scriptend" $TMPF | head -1 | cut -d: -f1` && sed -n `expr \`echo $STARTL\` + 2`,`expr \`echo $ENDL\` - 2`p $TMPF > $HOOKF && chmod 755 $HOOKF; rm $TMPF; else echo "Error: $HOOKF exists"; fi else echo "Error: Not a git repo"; fi

Enable Hooks Globally

To enable git hooks for all new git projects, you can use your own git template directory to build out your hooks. See the following article:



This comment has been minimized.

Copy link

@zack-snyder zack-snyder commented Jul 13, 2017

How can I append the issue number in the next line?
switching to :echo "$COMMIT_MSG $JIRA_ID" > $COMMIT_FILE
doesn't work.


This comment has been minimized.

Copy link

@TheLoneUs TheLoneUs commented Jun 4, 2018

I know this is old, but:
Have you tried echo -e "$COMMIT_MSG\n$JIRA_ID" > $COMMIT_FILE
-e flag enables interpretation of backslashes and the \n is a newline. No guarantees it will work on all systems, but it should give you an idea of what you need to try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment