为何Git分支名称不能以井号(#)开头?
Git分支名带#的那些坑:为什么有些命令报错,有些看似正常却没效果?
这其实是shell的注释规则在搞鬼!# 在 bash/zsh 这类常用shell里是注释起始符号:只要它前面是空格(或者处于行首),后面的所有内容都会被shell直接忽略,根本传不到Git命令里去。下面拆解你遇到的三种情况:
情况1:
git checkout -b #1-my-awesome-feature报错
执行这个命令时,shell看到#前面是空格,直接把#1-my-awesome-feature当成注释扔掉了,实际传给Git的命令是git checkout -b——这显然缺了分支名参数,所以Git会抛出error: switch 'b' requires a value的错误。
解决方法很简单,让shell把#当成普通字符处理就行:- 转义写法:
git checkout -b \#1-my-awesome-feature - 引号包裹:
git checkout -b "#1-my-awesome-feature"或者git checkout -b '#1-my-awesome-feature'
- 转义写法:
情况2:
git branch #1-my-awesome-feature不报错,但分支不存在
还是同样的shell注释逻辑:#1-my-awesome-feature被shell忽略,实际执行的是不带任何参数的git branch——这个命令本来就是用来列出当前本地分支的,所以不会报错,但根本没触发创建分支的逻辑,自然用git branch --all看不到这个分支。情况3:#不在分支名首位时能正常创建
当#前面有连续字符(比如feature-#1),shell不会把它当成注释起始符,整个分支名字符串会完整传给Git。而Git本身是支持分支名包含#的(只要不是Git内部保留的特殊字符),所以这个命令能正常创建分支。
内容的提问来源于stack exchange,提问作者iveres
相关产品推荐
相关产品推荐

