我试图用以下命令从master
创建一个分支,
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
当Git突然停止响应时。 我怀疑未转义的()
应该归咎于某种原因。 现在,每当我尝试运行任何Git命令时,我都会收到同样的错误:
git:176: command not found: _of_ProductSearchQuery
每次输入命令时, git
后的数字都会增加。
谁能解释发生了什么? 我该如何恢复正常? 我想删除那个分支,但我该怎么做呢?
#1楼
问题
谁能解释发生了什么? [...]我希望能够删除那个分支,但Git不适合我。
通过运行
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
在zsh中, 您没有创建任何分支 。 相反,你不小心定义了三个shell函数 ,称为git
, branch
和SSLOC-201_Implement___str__
,它们忽略了它们的参数(如果有的话),它们的主体是_of_ProductSearchQuery
。 您可以通过调用名为functions
的builtin zsh命令来自行检查这确实发生了什么,该命令列出了所有现有的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
是一个环境变量
[t]交互式shell中的当前历史事件编号,换言之,导致
$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
属于提交消息,而不是分支名称。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3188777