git - 如何判断git-hook是否有rebase?

标签 git bash githooks

基于此question我做了一个 git hook prepare-commit-msg

#!/bin/sh
#
# Automatically adds branch name and branch description to every commit message.
#
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 

它在简单的提交上工作得很好。示例 - [issue14020]:如果在 issue14020 分支中提交了一些文本消息

但后来我做了一个 rebase ,我收到了这样的消息 [(no branch)]: [issue14020]: some text message。有什么办法可以跳过这个“无分支”部分吗?

最佳答案

如果你最终处于 headless 状态,你会在 rebase 提交上得到“(无分支)”。

与其使用 git branch 获取当前分支名称,不如使用 NAME=$(git rev-parse --abbrev-ref HEAD) 它将返回当前分支名称如果您处于 headless 模式,则分支或“HEAD”。

重新编写你的脚本,然后变成:

NAME=$(git rev-parse --abbrev-ref HEAD);
if [ "$NAME" != 'HEAD' ] ; then
    DESCRIPTION=$(git config branch."$NAME".description);
    echo "[$NAME]"': '$(cat "$1") > "$1";
    if [ -n "$DESCRIPTION" ] ; then
        echo "" >> "$1";
        echo $DESCRIPTION >> "$1";
    fi
fi

关于git - 如何判断git-hook是否有rebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940782/

相关文章:

python - 如何通过 git pre-receive hook 验证用户身份

git - 使用 WinSCP NuGet 包(和 git),我可以将 WinSCP.exe 添加到我的 git 忽略中吗?

git - git ://protocol? 到底是什么

git - 无法让 git 自动将 diff/log 传送到 less(Windows 上的 bash)

git - 将远程克隆的存储库推送到我自己的 github 存储库,保持其可更新

bash - 为什么退出循环后我的数组消失了?

python - bash 和 python 管道的区别

json - 根据内容重命名 JSON 文件

git - 调试 git hook 的执行

git - 在 git push 上跳过 githooks