Skip to content

Instantly share code, notes, and snippets.

Last active March 20, 2024 08:12
Show Gist options
  • Save bartoszmajsak/1396344 to your computer and use it in GitHub Desktop.
Save bartoszmajsak/1396344 to your computer and use it in GitHub Desktop.
How to automatically prepend git commit with a branch name
# This way you can customize which branches should be skipped when
# prepending commit message.
if [ -z "$BRANCHES_TO_SKIP" ]; then
BRANCHES_TO_SKIP=(master develop test)
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "\[$BRANCH_NAME\]" $1)
if [ -n "$BRANCH_NAME" ] && ! [[ $BRANCH_EXCLUDED -eq 1 ]] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
sed -i.bak -e "1s/^/[$BRANCH_NAME] /" $1
Copy link

@bartoszmajsak I used this as inspiration to create a githook that prepends commit messages with a Jira ticket number (or some other pattern) if it is present in the branch name. I think this may be more practical for a lot of teams than using the entire branch name.

Copy link

Wow, I'm amazed this little thing lives its own life. Thanks for all the comments and I'm super glad you found it useful. I guess it's time to update my blog with the suggestions :)


Copy link

Demwunz commented May 22, 2020

This is awesome.
Can anyone suggest a way to get this working with husky?

Copy link

@Demwunz I haven’t tried it out yet, but you might give this a try. Let us know how it goes 👍

Copy link

Demwunz commented May 22, 2020

@johncmunson, thanks, we're working with Jira now, so I'll just go ahead and use that!

Copy link

Thanks for the nice script. Does anyone know how to prevent pepending the commit msg if I do a rebase?

Copy link

Does anyone here uses GitKraken? I tried to use this hook but it isn't appending the branch name to the commit when commiting from GitKraken.

I just tried this now. It works perfectly on command line, but on GitKraken the commit message becomes somehow empty.

Copy link

LenKIM commented Oct 14, 2021

It's pretty awesome, I check It working, but I got some issues


I don't know why like this warnning show me.

  1 #!/usr/bin/env bash
  3 if [ -z "$BRANCHES_TO_SKIP" ]; then
  4   BRANCHES_TO_SKIP=(master develop release hotfix)
  5 fi
  8 BRANCH_NAME=$(git symbolic-ref --short HEAD)
 10 JIRA_ID=`echo $BRANCH_NAME | egrep -o "$PROJECT_ID-[0-9]+"`
 12 BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
 14 COMMIT_MSG_HEAD=$(head $1 -n 1)
 17 if [ -n $JIRA_ID ] && ! [[ $BRANCH_EXCLUDED -eq 1 ]] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
 18   sed -i.bak -e "1s/^/[$JIRA_ID] /" $1
 19 fi

Copy link

Would it be possible to use sed to replace a variable of a commit.template instead of adding at the beginning/end of the commit message?




Copy link


Do you have a script that will work on windows machines?

Copy link

@samarnayak where do you want to run it? Under Powershell?

Alternatively, under WSL or (even) Cygwin things should work fine. But I have to admit I haven't tried it myself.

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