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

sca*_*pus 68 git

我正在考虑Git命令使用的原因

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

git branch -d <localbranch>

为什么不做类似的事情

git branch -d --remote origin <branchname>

还是我以前从未知道过结肠符号的深层含义?

man*_*lds 77

这不是:本身的意义,而是存在的,或者说在它之前缺席的意义.

refspec格式是

<+><source>:<destination>
Run Code Online (Sandbox Code Playgroud)

(可选+非快进)

因此,当您执行类似操作时git push origin :featureA,您指定了一个空的源ref并基本上使目标为"空"或删除它.

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

  • Git> = 1.7.0添加`git push origin -d <branch>`删除和`git push origin -D <branch>`强制删除远程分支. (4认同)
  • @ITIA 当您的本地分支的名称与远程分支的名称不同时。 (2认同)

Rya*_*art 19

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

  • @Umang:afaik,这只是一个概念性的事情,我没有说"推空分支".我说"什么都不推".我并不反对你的评价,即它前面的"+"更有意义,但这就是它的工作原理.请参阅我发布的refspecs链接的[last section](http://progit.org/book/ch9-5.html#deleting_references),并决定您是否信任作者. (3认同)