为什么分支名称在开头不能包含'hash'(#)char?

ive*_*res 7 git workflow naming-conventions git-checkout git-branch

这个

git checkout -b #1-my-awesome-feature
Run Code Online (Sandbox Code Playgroud)

造成错误

error: switch `b' requires a value
Run Code Online (Sandbox Code Playgroud)

用反斜杠转义它或用引号括起来都行

git checkout -b \#1-my-awesome-feature
Run Code Online (Sandbox Code Playgroud)

但这很奇怪

git branch #1-my-awesome-feature
Run Code Online (Sandbox Code Playgroud)

不会产生任何错误,如果你检查它是否与创建

git branch --all
Run Code Online (Sandbox Code Playgroud)

没有分支.

如果散列字符不在分支名称的第一个位置,则将创建分支.

git branch feature-#1
Run Code Online (Sandbox Code Playgroud)

执行 git branch

feature-#1
* master
Run Code Online (Sandbox Code Playgroud)

所以我的问题是hash(#)char是如何在终端中"翻译"的,以及为什么它在第一时就无法工作?

谢谢!

Var*_*arg 12

#意味着评论正在开始(至少在Linux shell中).所以

git checkout -b #1-my-awesome-feature
Run Code Online (Sandbox Code Playgroud)

变为:

git checkout -b
Run Code Online (Sandbox Code Playgroud)

并抛出该b选项需要值的错误.

如图所示在这里,你可以通过逃避解决这个#\或通过将名称中的单/双引号:

git checkout -b \#1-my-awesome-feature
git checkout -b "#1-my-awesome-feature"
git checkout -b '#1-my-awesome-feature'
Run Code Online (Sandbox Code Playgroud)