我尝试使用以下命令从master
创建分支
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
当Git突然停止响应时。我怀疑未经证实的()
应该归咎于某种原因。现在,每当我尝试运行任何Git命令时,我都会得到同样的错误:
git:176: command not found: _of_ProductSearchQuery
每次输入命令时git
后面的数字都会增加。
任何人都能解释发生了什么吗?我该如何恢复正常?我想删除那个分支,但我该怎么办呢?
答案 0 :(得分:613)
任何人都能解释发生了什么吗? [...]我很乐意删除那个分支,但Git不会为我工作。
运行
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
在zsh中,您没有创建任何分支。相反,您不小心定义了三个名为git
,branch
和SSLOC-201_Implement___str__
的 shell函数,它们忽略了它们的参数(如果有的话),其主体是{{ 1}}。您可以通过调用名为_of_ProductSearchQuery
的内置zsh命令来检查自己确实发生了什么,该命令列出了所有现有的shell函数:
functions
不幸的是,虽然其他两个shell函数没有问题,但 shell函数调用了" git"现在隐藏真正的 $ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
命令!
git
因此,您将随后收到错误
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
每当您尝试运行Git命令时,例如command not found: _of_ProductSearchQuery
,git log
等(当然,假设没有名为git status
的命令)。
[...]我得到了同样的错误:
_of_ProductSearchQuery
(每次输入命令时
git:176: command not found: _of_ProductSearchQuery
后面的数字都会增加)
该数字只对应于git
的值,这是一个包含
[t]交互式shell中的当前历史事件编号,换言之,导致
HISTCMD
被读取的命令的事件编号。
有关详细信息,请参阅zsh manual。
我该如何恢复正常?
只需删除有问题的shell函数(以及您偶然创建的其他两个函数,当您还在其中时):
$HISTCMD
然后一切都会好起来的。
unset -f git
unset -f branch SSLOC-201_Implement___str__
被遮蔽了怎么办?!Good question!我推荐你到下面的Wumpus W. Wumbley's excellent comment。
是的,正如评论中所指出的,括号是Git分支名称中的有效字符;你只需要恰当地引用这个名字,例如
unset
但是,当用作命令行参数时,每次引用此类名称的需要应该说服您避免使用引用名称中的括号。更一般地说,你应该(尽可能地)避免在shell中具有特殊含义的字符,以防止出现这样的意外。
无论如何,你应该保持你的分支名称简短而甜蜜。像
这样的长描述SSLOC-201_Implement ___ STR __()_ of_ProductSearchQuery
属于提交消息,而不属于分支名称。