为什么Git使用冒号(:<branch>)来删除远程分支</branch>

时间:2011-09-05 03:36:54

标签: git

我正在考虑为什么Git命令使用

git push <remote> :<branch> 喜欢 git push origin :featureA删除远程服务器中的featureA分支。我很感兴趣为什么将冒号作为删除标志。

与众不同

git branch -d <localbranch>

为什么不做类似

的事情

git branch -d --remote origin <branchname>

或者我以前从未知道结肠符号的深层含义?

2 个答案:

答案 0 :(得分:73)

这不是:本身的含义,而是存在的,或者说在它之前不存在。

refspec格式是

<+><source>:<destination>

(可选+非快进)

因此,当您执行git push origin :featureA之类的操作时,您指定的是一个空的源引用,并且基本上将目标设为“空”或将其删除。

PS:请注意,:的refspec或者什么都不是并不意味着什么都不做。它使git推送“匹配”分支:对于本地端存在的每个分支,如果远程端已存在同名分支,则更新远程端。

答案 1 :(得分:18)

冒号不是“删除标志”。请注意,git pushgit pull都接受零个或多个refspec作为其最终参数。现在read about refspecs。冒号在refspec中分隔源和目标。命令git push origin :foo有一个空的源,基本上是说“将没有推送到原始的分支foo”,换句话说,“make origin foo on origin not exists”。