无法删除意外创建的远程分支

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

我想删除远程分支 "remotes/origin/social",并运行了以下命令:

$ git branch -d -r origin/social
Deleted remote branch origin/social (was 26f6f61).

但我不知道如何远程地进行这些更改,以便从origin中删除分支并使每个人都能看到更改。我尝试过git push,但那没用。

有什么帮助吗。

5个回答

45

我遇到了这个错误(来自上文):

谢谢。实际上,我注意到了这个解决方案并尝试过。但是,这会导致以下错误... $ git push origin :heads/socail 输入密钥'/h/.ssh/id_rsa'的密码: 错误:无法将内容推送到未合格的目标:heads/socail 目标refspec与远程端不存在的ref不匹配,也不以refs/开头,我们无法根据源ref猜测前缀。 错误: 有些ref推送失败到 'git@xxxxxx.git' – Himel May 24 '10 at 9:37

它似乎对我是否已经在远程删除它感到困惑了。我解决了这个问题,方法如下:

git push origin HEAD:branch_to_delete

git push origin :branch_to_delete

这对我有用。使用的版本是:git version 1.7.3.1.msysgit.0


44
看起来该分支已经被删除了。git pull 不会删除远程已删除的分支,你需要使用 prune:git remote prune origin - http://stay-calm.blogspot.com/2009/02/git-prune-to-remove-old-remote-tracking.html - Josh
4
我会尽力进行翻译:上面的评论应该是这里最受欢迎的答案。当然,Nathan的方法是有效的,但它掩盖了这里真正的错误。 - fforw

8
正如@JoshNathan McDaniel's Answer的评论中提到的那样,这可能是由于远程仓库中不再存在该分支。 这导致git branch -a仍会在origin下显示该分支(或者您为该特定远程仓库命名的任何名称),但是删除远程仓库上的分支是不可能的,因为它在远程上不再存在。 这可能是由于在其他计算机上删除了远程上的分支(除了git pullgit fetch不会删除从远程仓库中删除的远程分支的引用之外)。

解决方法

只需使用git remote prune删除已从远程仓库中删除的所有远程跟踪分支:

git remote prune REMOTENAME

例如,如果你的远程名称是origin(很可能是这样),上述命令将如下所示:
git remote prune origin

根据 git 提供的文档:

git remote prune [-n | --dry-run] <name>

删除 <name> 下所有过期的远程跟踪分支。这些过期的分支已经从 <name> 指向的远程仓库中删除,但仍然存在于“remotes/”目录下。

使用 --dry-run 选项可以报告将要被修剪的分支,但不会实际修剪它们。


7

git push origin :social
但是在此之前或之后,您需要在本地也删除。


1
谢谢。实际上我注意到了这个解决方案并尝试过早些时候。但是,它会出现以下错误...$ git push origin :heads/socail 输入密钥'/h/.ssh/id_rsa'的密码: 错误:无法推送到不合格的目标: heads/socail 目标refspec既不匹配远程上的现有ref,也不以refs/开头,我们无法根据源ref猜测前缀。 错误:未能将某些refs推送到'git@xxxxxx.git'。 - Himel
无论您是在本地删除还是不删除,您是否注意到您最后一个示例中有一个错别字 socail/social? - Arkaitz Jimenez
对,有个拼写错误,实际上我在这里写的是错的。但在实际控制台中我应用正确了。 - Himel
上次我需要这样做时,情况完全一样。无论如何,错误消息看起来像分支不再存在,你尝试过克隆代码库并检查分支是否仍然存在吗? - Arkaitz Jimenez
如果这不起作用,也有可能远程 repo 配置为不允许删除远程分支。我管理的所有 repo 都是这样配置的(因为删除分支会让你绕过非快进更新限制 :-P)。在这种情况下,删除分支的唯一方法是前往远程存储库并在那里进行操作。 - ebneter
显示剩余3条评论

3
下面的命令将删除远程跟踪分支,但不会删除远程存在的分支。
$ git branch -d -r origin/social
Deleted remote branch origin/social (was 26f6f61).

删除远程分支的方法:

git push origin  :social

这将自动删除远程跟踪分支,即remotes/origin/social。

-3

关于删除远程分支的详细说明请参见此处


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