如何在Git中删除远程分支?

chr*_*ock 73 git

我创建了一个分支notmaster来提交并推送一些更改.当我完成该分支时,我将更改合并回来master,将它们推出,然后删除本地notmaster.

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/notmaster
Run Code Online (Sandbox Code Playgroud)

无论如何要删除遥控器notmaster


使用Ionut解决方案更加清晰:

通常的方法对我来说失败了:

$ git push origin :notmaster
error: dst refspec notmaster matches more than one.
Run Code Online (Sandbox Code Playgroud)

那是因为我有一个与分支同名的标签.这对我来说是一个糟糕的选择,并造成了模糊性.所以在这种情况下:

$ git push origin :refs/heads/notmaster
Run Code Online (Sandbox Code Playgroud)

Ion*_*tan 56

git push origin :notmaster,这基本上意味着"不向notmaster遥控器推送".

  • 哦,是的,这就是原因.我相信你可以使用`git push origin删除它:refs/heads/notmaster`.不过不确定. (20认同)
  • @chrisaycock:事实上,你*需要*去做Ionut建议的事情(消除对refs/heads/notmaster的歧义),因为使用`git branch -d -r`命令,你只删除了本地远程跟踪分支,而不是遥控器上的实际分支.如果你没有在遥控器上删除它,它将在你下次获取时显示. (11认同)
  • 错误:dst refspec notmaster匹配多个. (2认同)
  • 啊,你的第二个建议奏效了!我有一个标签与该分支具有相同的标签(notmaster).这会导致错误吗? (2认同)

Ole*_*aev 47

我遇到过同样的问题.我有一个分支和一个名为3.2的标签.这就是它说不止一场比赛的原因:

git error: dst refspec 3.2 matches more than one.
Run Code Online (Sandbox Code Playgroud)

以下是删除分支的方法:

git push origin :heads/3.2
Run Code Online (Sandbox Code Playgroud)

以下是删除标记的方法:

git push origin :tags/3.2 
Run Code Online (Sandbox Code Playgroud)


jas*_*lph 15

git push origin --delete notmaster
Run Code Online (Sandbox Code Playgroud)

如果你正在使用Git 1.7.0或更高版本,这将有所帮助.在Git 1.7.0之前,您需要使用不那么直观(但同样有效)的语法:

git push origin :notmaster
Run Code Online (Sandbox Code Playgroud)

较旧的语法仍适用于较新版本的Git,但较新的语法似乎更人性化,更易于记忆.如果我想删除一个分支,打字--delete似乎是很自然的事情.

1.7.0发行说明:

"git push"学到了"git push origin --delete branch",一个用于"git push origin:branch"的语法糖.


aas*_*sha 6

发生这种情况是因为分支和标签的名称相同。

从远程使用中删除分支

git push origin :refs/heads/branchname

从远程使用中删除标签

git push origin :refs/tags/tagname

要从本地删除,您可以使用以下命令。

git branch -d branchname

git tag -d tagname