Skip to content

Instantly share code, notes, and snippets.

Embed
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:

#!/bin/sh

COMMIT_FILE=$1
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 $COMMIT_MSG" > $COMMIT_FILE
    echo "JIRA ID '$JIRA_ID', matched in current branch name, prepended to commit message. (Use --no-verify to skip)"
fi

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 https://gist.githubusercontent.com/robatron/01b9a1061e1e8b35d270/raw > $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:

https://coderwall.com/p/jp7d5q/create-a-global-git-commit-hook

References

@zack-snyder

This comment has been minimized.

Copy link

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.

@TheLoneUs

This comment has been minimized.

Copy link

commented Jun 4, 2018

@zack-snyder
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
You can’t perform that action at this time.