2012-09-05 192 views
5

当我执行branch -a删除远程分支

$ git branch -a 
* master 
remotes/origin/HEAD -> origin/master 
remotes/origin/hello 
remotes/origin/master 

然后我删除分支:

$ git branch -r -D origin/hello 
Deleted remote branch origin/hello (was c0cbfd0). 

现在我明白了:

$ git branch -a 
* master 
remotes/origin/HEAD -> origin/master 
remotes/origin/master 

分支 “你好” 有已被删除。 但是,当我取:

$ git fetch 
From localhost:project 
* [new hello]  hello  -> origin/hello 

$ git branch -a 
* master 
remotes/origin/HEAD -> origin/master 
remotes/origin/hello 
remotes/origin/master 

我很困惑。
我认为它已被删除,但它仍然存在。

回答

6

你需要从远程使用以下命令将其删除:

git push origin --delete hello 

当您运行git branch -rd origin/hello你只是删除您的本地分支。上面的代码将它从原始仓库中删除。

3

delete a remote branch,使用

git push origin :remotebranch 

其他一切只在本地储存库来操作。 在较新版本的Git,还可以

git push origin --delete remotebranch 

按照该documentation--delete意味着同样的“为前缀的所有参用冒号”。

如果您想知道:的含义,它遵循push的标准语法。通常情况下,你会写

git push origin localbranch:remotebranch 

但在这里,你用“一无所有”取代localbranch,有效地删除远程分支。

0
git push origin --delete somebranch 

是您删除远程分支的方式。如果你仍然在旧版本的Git,你可能需要使用旧的语法:

git push origin :somebranch 

转换为“对原产远程指出,没有推入somebranch”。该命令的格式为“git push(哪个远程回购)(什么是本地引用):(哪个远程引用)。省略(引用)被解释为”什么都不放入“(远程引用),有效地删除它。新的语法更加直观。

1

需要注意的是git的分支只允许删除当地引用。

git branch -r -D origin/hello 

这只是删除本地指针remote tracking branch,但对没有任何影响远程回购内容本身。
只有正如其他答案中提到的那样,会这样做。

另外,它不会更改配置branch.hello.fetch:它仍然引用origin/hello,这就是为什么下一个获取将在本地回购库中重新创建远程跟踪分支的原因。