我如何创建git钩子来预先发送带有分支名称的提交消息?

我如何创建git钩子来预先发送带有分支名称的提交消息?,git,bash,Git,Bash,我读到它提供了一个稍微有效的prepare commit msg,我对它做了一些修改: #!/bin/sh # # Automatically adds branch name and branch description to every commit message. # # todo: # * breaks merge commit message # * breaks git commit --amend NAME=$(git branch | grep '*' | sed 's/*

我读到它提供了一个稍微有效的
prepare commit msg
,我对它做了一些修改:

#!/bin/sh
#
# Automatically adds branch name and branch description to every commit message.
#
# todo:
# * breaks merge commit message
# * breaks git commit --amend

NAME=$(git branch | grep '*' | sed 's/* //')
DESCRIPTION=$(git config branch."$NAME".description)

echo "[$NAME]"' '$(cat "$1") > "$1"
if [ -n "$DESCRIPTION" ]
then
   echo "" >> "$1"
   echo $DESCRIPTION >> "$1"
fi
走“快乐之路”,即:

将按预期工作,输出:

some-modular-app git:test-commit-hooks ❯ log | grep 9406dfb
* 9406dfb - [test-commit-hooks] Make edit (2 hours ago) <mbigras>
为了进入vim,由于某种原因,新行被删除,这迫使人们编辑消息,将注释放在自己的行上,如下所示:

二,

将导致与1相同的问题。但它也会在前面加上第二个
[分支名称]
,如下所示

我如何修改上面的脚本来解决用例1和用例2的问题


谢谢请在钩子中尝试以下代码片段:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo -n "$NAME"': '|cat - "$1" > /tmp/out && mv /tmp/out "$1"
答案隐藏在你的脑海里。另见中所述
git commit
git commit --amend
NAME=$(git branch | grep '*' | sed 's/* //') 
echo -n "$NAME"': '|cat - "$1" > /tmp/out && mv /tmp/out "$1"