7

如何确保 git 要求确认任何硬重置?

我已经有好几次了。终端出错了(bash 历史导航),只向我显示了命令的最后一部分……我按下回车键,令我惊讶的是重置了我的所有更改。

那么有没有办法确保在正常操作下git在执行硬重置时要求确认?

4

1 回答 1

6

Git 本身并没有实现这一点(永远!),并且不可能给内置的 Git 命令起别名,所以我看到了两种方法:

  • 一个自定义包装器——类似于

     # cat >/usr/local/bin/mygit
     #!/bin/sh
     set -e -u
     if [ $# -ge 2 ]; then
         if [ "x$1" = "xreset" -a "x$2" = "x--hard" ]; then
             echo 'Sure?'
             read resp || exit $?
             test "x$resp" = "xyes" || exit 0
         fi
     fi
     git "$@"
     ^D
     # chmod +x $_
     $ mygit reset --hard
    
  • 外壳别名:

    cat >>~/.bashrc
    alias git /usr/local/bin/mygit
    ^D
    

    哪里/usr/local/bin/mygit取自上一点。

更新以合并 William Pursell 的建议——一个“覆盖”外部命令的 shell 函数:

# cat >>~/.bashrc
git() {
    set -e -u
    if [ $# -ge 2 ]; then
        if [ "x$1" = "xreset" -a "x$2" = "x--hard" ]; then
            echo 'Sure?'
            read resp || return $?
            test "x$resp" = "xyes" || return 0
        fi
    fi
    command git "$@"
}
^D

之后,git blah ...shell 中的 plain 将调用包装函数,而 direct/usr/bin/git将直接调用 Git。

于 2013-10-04T12:17:10.883 回答