Git Checkout切换含#字符的远程分支时出现zsh: no matches found错误的问题求助
为什么
git checkout带#的分支会报“no matches found”错误? 嘿,这个问题我之前也碰到过!根源不在Git,而是你的zsh shell在解析命令时的特性导致的~
问题原因
在zsh里,#有两个特殊作用:
- 它是注释符号:从
#开始到行尾的内容会被zsh当作注释忽略 - 同时它会触发shell的文件名匹配(globbing):zsh会尝试在当前目录下寻找匹配
hisName/branchNameWithAHash#Inside这个模式的文件/目录,找不到就会抛出no matches found的错误
而你用git branch -r能看到远程分支,是因为这个命令直接从Git的远程分支数据库读取内容,不会经过zsh的特殊字符解析,所以能正常显示带#的分支名。
解决办法
你可以用以下几种方式绕开zsh的解析:
用单引号包裹分支名:
单引号会让zsh把里面的内容当作纯字符串,不解析任何特殊字符:git checkout 'hisName/branchNameWithAHash#Inside'转义
#符号:
在#前面加反斜杠\,告诉zsh这是一个普通字符,不是注释或匹配符号:git checkout hisName/branchNameWithAHash\#Inside使用
git switch命令(Git 2.23+支持):
如果你用的是较新版本的Git,git switch是更推荐的分支切换命令,同样用引号或转义即可:git switch 'hisName/branchNameWithAHash#Inside'如果是第一次拉取远程分支:
可以加上--track参数关联远程分支,同样要处理#的转义或包裹:git checkout --track 'origin/hisName/branchNameWithAHash#Inside'
内容的提问来源于stack exchange,提问作者Raphael Pinel
相关产品推荐
相关产品推荐

