防止运行没有附加参数的'git stash'

防止运行没有附加参数的'git stash',git,Git,任何人都知道是否可以修改git,因此它将简单地拒绝git stash,而不是要求我明确指定git stash push。当我想检查藏品时,我经常发现自己不小心把东西藏了起来(git stash list)。类似地,如果我在索引中有东西,然后做git隐藏(并且忘记添加——保留索引),这也是相当烦人的。这反过来会产生灾难性的后果()将函数添加到~/.bashrc function git() { GIT=`which git` if [[ "$#" -eq 1 ]] && [

任何人都知道是否可以修改
git
,因此它将简单地拒绝
git stash
,而不是要求我明确指定
git stash push
。当我想检查藏品时,我经常发现自己不小心把东西藏了起来(
git stash list
)。类似地,如果我在索引中有东西,然后做
git隐藏
(并且忘记添加
——保留索引
),这也是相当烦人的。这反过来会产生灾难性的后果()

将函数添加到
~/.bashrc

function git() {
  GIT=`which git`
  if [[ "$#" -eq 1 ]] && [[ "$1" = "stash" ]];then
    echo 'WARNING: run "git stash push" instead.'
  else
    $GIT $@
  fi
}

虽然我在Ubuntu和Windows上试过,都成功了,但我不确定是否有任何副作用会导致bug。

您可以查看git alias,但我不确定它如何在您的上下文中正常工作。别名不起作用,因为git显式忽略已知命令的别名。@MatthieuMoy这不是真的。您可以将
stash=log
放在
.gitconfig
中的
[alias]
下,然后
git stash
将打印日志。但是,
git-stash-pop
也将不再有效,所以我不确定这种方法是否能带来满足运营要求的东西…@anothernode:你真的尝试过吗?我有,它不起作用(只是在Git.Git中用Git的主分支再次测试过,它仍然不起作用)。它被证明不起作用:“隐藏现有Git命令的别名被忽略”。@MatthieuMoy是的,我试过了,它在我的机器上确实起作用。现在我发现了原因:我正在使用它,它显然干扰了git的别名机制。当我从shell配置中删除
git='hub'
别名时,git的行为与您描述的一样。抱歉,我忘了我在某个时候把它放在shell配置中了,d'oh:)请注意,当从shell函数中运行命令时,您可以使用
command GIT
绕过shell函数,而不是
GIT=$(哪个GIT)
。不过,总体效率大致相同。在使用bash函数时,也不需要使用“function”关键字。只需git(){…}就可以了。else子句应该是“$git”“$@”,也就是说,应该双引号引用$git和$@。如果您的GIT有一个带有空格的路径(尽管不太可能),那么引用$GIT会有所帮助。更重要的是,参数应为“$@”,以适应参数中的空格,尤其是在-m消息参数中。请注意,语法“$@”是特殊的:bash不会引用整个参数字符串,而是分别引用每个参数。所以“$@”类似于“$1”“$2”…而不是“$1$2…”。也就是说,bash将做“正确的事情”。有关详细信息,请参见bash手册(manbash)§特殊参数。条件[[“$#”-eq 1]]&&[“$1”=“stash”]]可能更好地表示为[[“$#”-eq 1&&&“$1”=“stash”]],或者如果您愿意,[[(“$#”-eq 1)&&($1”=“stash”)]。也就是说,将&&运算符放在[…]测试中。意见可能不同。