如何挂钩“存储保存”以要求自定义存储消息?

时间:2014-02-16 04:45:34

标签: git githooks git-stash

通常在执行git stash时,我忘记提供自定义消息。除非有自定义消息,否则我如何制作一个拒绝藏匿创建的钩子?

3 个答案:

答案 0 :(得分:0)

您可以使用git stash save "<your_message>"

答案 1 :(得分:0)

对于当前版本的git(1.8.3),不能通过在路径中提供git-command脚本(例如git-stash)来为现有的git命令添加别名或覆盖它们。

你只需要使用shell函数,但无论如何这也可能是最合适的事情。例如,您可以在这些行中添加一些内容到.bashrc

function git() {
    if [[ $1 == stash ]] && [[ $2 == save ]]; then
        SAVED_ARGS=("$@")
        shift; shift;
        while test $# != 0; do
            case "$1" in
            --) shift; break;;
            -*) ;;
            esac
            shift;
        done
        [[ -z "$*" ]] && { echo "Error - empty stash message!"; return 1; }
        command git "${SAVED_ARGS[@]}"
    else
        command git "$@"
    fi
}

这将只截取一个空的git stash save,并将其他所有内容转发给git as-is。将传递git stash save的可选参数。

答案 2 :(得分:0)

为什么不使用普通的git checkins而不是stash?

$ git checkout my_work_branch
$ $EDITOR file.c
# At this point you are in the middle of some new change but then want
# temporarily save to do another change first

$ git co -b stash
$ git add file.c
$ git commit -m "custom stash message"
$ git checkout my_work_branch
$ $EDITOR file.c
$ git add file.c
$ git commit -m "Some other fix"

$ git rebase --onto my_work_branch stash^ stash
$ git reset HEAD^
$ git checkout my_work_branch
$ git branch -D stash

是的,我知道这是更多要编写的命令,但这样你就可以完全控制所有内容,而且这种方法无法失败。多年前我开始学习git时,我只是简单地使用了git stash,但对我来说它太脆弱了,从失败的git stash pop中恢复是不可能或非常困难的。也许git stash从那时起已经有所改进,但无论如何我不喜欢stank的方式混淆了gitk中显示的版本树,所以我更喜欢上面描述的方式。