master
创建分支:git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
。我怀疑某种原因归咎于未转义的
()
。现在,每当我尝试运行任何Git命令时,都会遇到相同的错误:git:176: command not found: _of_ProductSearchQuery
每次键入命令时,
git
之后的数字都会增加。谁能解释发生了什么?我如何恢复正常?我想删除该分支,但是我该怎么做?
#1 楼
问题有人可以解释发生了什么吗? [...]我很希望能够删除该分支,但Git不能为我工作。
通过运行
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
在zsh中,您没有创建任何分支。相反,您无意中定义了三个壳函数,分别称为
git
,branch
和SSLOC-201_Implement___str__
,它们忽略了它们的参数(如果有)并且其主体为_of_ProductSearchQuery
。您可以通过调用内置的qsh命令functions
来检查自己是否确实发生了这种情况,该命令列出了所有现有的shell函数: $ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
不幸的是,尽管另外两个shell函数没有问题,但名为“ git”的shell函数现在已经掩盖了真正的
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)
因此,无论何时,您都将随后收到错误
command not found: _of_ProductSearchQuery
尝试运行Git命令,例如
git log
,git status
等(当然,假设不存在称为_of_ProductSearchQuery
的命令)。边注
[...]我得到了相同的错误:
git:176: command not found: _of_ProductSearchQuery
(每次我键入命令时,
git
之后的数字都会增加)该数字简单地对应到环境变量
HISTCMD
的值,该环境变量在交互式外壳中保存当前历史事件编号,换句话说,导致$HISTCMD
为请阅读。有关更多详细信息,请参见zsh手册。
解决方案
我该如何返回正常吗?
只需删除有问题的shell函数(以及您在使用它时偶然创建的另外两个函数):
unset -f git
unset -f branch SSLOC-201_Implement___str__
那么一切都应该没问题。
如果
unset
也被阴影遮盖了怎么办?!问得好!我请您参考Wumpus W. Wumbley在下面的出色评论。
避免使用任何特殊的shell字符
是的,如注释中所指出,括号是Git分支名称中的有效字符;您只需要适当地引用名称即可,例如
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
但是,需要引用每次将此类名称用作命令行参数时,都应说服您避免引用名称中的括号。更一般而言,您应(尽可能)避免在shell中具有特殊含义的字符,以防止出现此类情况。
使用简单的分支名称
,您应该无论如何,保持分支名称简短而优美。
SSLOC-201_Implement ___ str __()_ of_ProductSearchQuery
的详细描述属于提交消息,而不是分支名称。
评论
该线程状态中的任何内容均禁止非法。 Git似乎很好。切换到新的分支'abcd-()-foo'
– Qix-蒙尼卡(MS)被盗
2015年9月2日14:48
看起来不错;使用它们绝对不是一个好主意,但是从技术上讲它们并不是无效的。
– Qix-蒙尼卡(MS)被盗
2015年9月3日在7:33
如果有人还通过创建所谓的shell函数来掩盖未设置状态,会发生什么情况? (这可能吗?)
–马特奥·乌米利(Matteo Umili)
2015年9月3日15:52
@codroipo哈!那是个很好的观点。是的,这是有可能的,在这种情况下,最好重新启动zsh。
–jub0bs
2015年9月3日15:53
您可以使用内置未设置。如果内置和未设置都已被函数遮盖,则无法运行。如果也没有,请取消哈希-f。如果所有四个都不用了,请重新启动外壳。
–user2404501
2015年9月8日下午13:31
评论
我想这与您的zsh环境有关,因为我能够在bash shell中运行创建分支而没有不良副作用(lubuntu 13.10),但是当我切换到完全香草的zsh <时,我看到了错误br />将来,请引用看起来可疑的内容。 git branch“ SSLOC-201_Implement ___ str __()_ of_ProductSearchQuery”可以正常工作。
@Qix最好完全避免出现有问题的字符。
@Jubobs绝对可以,尽管我已经看到某些公司强制使用这种奇怪的分支机构名称。
@DwightSpencer您的链接特定于Bash,但此问题特定于zsh。该问题实际上并没有在Bash中发生。