如何确保 git 要求确认任何硬重置?
我已经有好几次了。终端出错了(bash 历史导航),只向我显示了命令的最后一部分……我按下回车键,令我惊讶的是重置了我的所有更改。
那么有没有办法确保在正常操作下git在执行硬重置时要求确认?
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。