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

94

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

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/notmaster
有没有办法删除远程的notmaster
更详细的解释,附上Ionut的解决方案
通常的方法对我不起作用:
$ git push origin :notmaster
error: dst refspec notmaster matches more than one.

这是因为我有一个和分支名称相同的标签。这是我做出的一个不好的选择,导致歧义。因此,在这种情况下:

$ git push origin :refs/heads/notmaster

2
我爱你!我已经试图解决同样的问题几个小时了!这就是为什么我喜欢StackOverflow +1!!! - Logan
6个回答

61

我遇到了相同的问题。我同时拥有一个名为3.2的分支和一个标签。 这就是为什么它会显示存在多个匹配项:

git error: dst refspec 3.2 matches more than one.

以下是删除分支的步骤:

git push origin :heads/3.2

以下是如何删除标签的方法:

git push origin :tags/3.2 

60

git push origin :notmaster的基本含义是“不将任何内容推送到notmaster远程仓库”。


4
错误:目标引用规范 notmaster 匹配了多个。 - chrisaycock
这是第一次。我以前从未见过这个错误。 - Ionuț G. Stan
3
啊,你的第二个建议奏效了!我有一个标签与该分支(notmaster)拥有相同的标签名。这可能导致错误吗? - chrisaycock
23
没错,这就是原因。我相信你可以使用 git push origin :refs/heads/notmaster 命令删除它,但我不是很确定。 - Ionuț G. Stan
11
实际上,你需要按照Ionut的建议进行操作(将其明确为refs/heads/notmaster),因为使用命令git branch -d -r只会删除本地的远程跟踪分支,而不是实际远程分支。如果你不在远程上删除它,下次拉取时它还会出现。 - Cascabel
显示剩余3条评论

17
git push origin --delete notmaster
如果您使用的是Git 1.7.0或更高版本,则可以使用此方法。在Git 1.7.0之前,您需要使用不那么直观(但同样有效)的语法:
git push origin :notmaster
旧的语法在新版本的Git中仍然有效,但是新的语法似乎更加人性化和易于记忆。如果我想要删除一个分支,键入--delete似乎是自然的选择。
1.7.0版本发布说明中:
“git push”学会了“git push origin --delete branch”,这是“git push origin:branch”的一种语法糖。

7
这是因为分支和标签的名称相同,导致出现了问题。
要从远程删除分支,请使用以下命令: git push origin :refs/heads/branchname 要从远程删除标签,请使用以下命令: git push origin :refs/tags/tagname 要从本地删除,请使用以下命令:
删除分支:git branch -d branchname 删除标签:git tag -d tagname

1

删除本地分支:

git branch -d {branch name} //All changes must be committed first.
git branch -D {branch name} //Does not require commit.

删除 Gitorious 分支:

Delete the local branch first.
git push {gitorious push url} :{branch name}

3
你的两个回答中,第二个是OP所寻找的答案,虽然它并不仅限于Gitorious,并且你不需要一个URL,只需要一个远程名称,而这个名称被OP提供了。在这种情况下,git push origin :notmaster,或者更清晰地说,git push origin :refs/heads/notmaster,会是一个更好的答案。 - Cascabel

0

以下步骤也可以达到同样的效果:

$ git fetch --prune --tags
$ git push origin :refs/tags/{same-branch-tag-name}
$ git push origin :{same-branch-tag-name}
$ git push --tags

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接