我正在考虑为什么Git命令使用
git push <remote> :<branch>
喜欢
git push origin :featureA
删除远程服务器中的featureA分支。我很感兴趣为什么将冒号作为删除标志。
git branch -d <localbranch>
为什么不做类似
的事情 git branch -d --remote origin <branchname>
或者我以前从未知道结肠符号的深层含义?
答案 0 :(得分:73)
这不是:
本身的含义,而是存在的,或者说在它之前不存在。
refspec格式是
<+><source>:<destination>
(可选+非快进)
因此,当您执行git push origin :featureA
之类的操作时,您指定的是一个空的源引用,并且基本上将目标设为“空”或将其删除。
PS:请注意,:
的refspec或者什么都不是并不意味着什么都不做。它使git推送“匹配”分支:对于本地端存在的每个分支,如果远程端已存在同名分支,则更新远程端。
答案 1 :(得分:18)
冒号不是“删除标志”。请注意,git push和git pull都接受零个或多个refspec作为其最终参数。现在read about refspecs。冒号在refspec中分隔源和目标。命令git push origin :foo
有一个空的源,基本上是说“将没有推送到原始的分支foo”,换句话说,“make origin foo on origin not exists”。