23

不要问我是怎么做到的,但我意外地在 git 存储库中获得了以下远程分支:

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/refs/heads/master

所有人都指向同一个提交。如何删除不必要的列表 origin/refs/heads/master

我尝试执行以下操作

$ git push origin :refs/heads/master
error: dst refspec refs/heads/master matches more than one.

但如图所示,这会产生错误。

4

3 回答 3

45

这实际上不是远程上的分支 - 它只是一个声称代表远程上的某些东西的本地 ref,就像 origin/master 代表远程上的 master 分支一样。ref 的全称是refs/remotes/origin/refs/heads/master. 删除它所需要做的就是:

git branch -r -d origin/refs/heads/master

您也有可能设法推动这一点(但您必须更加努力地做到这一点)。如果你这样做了,我会简单地列出来源的参考:

git ls-remote origin

然后,如果那里有什么愚蠢的东西,用git push origin :<refname>它来摆脱它。

PS 如果这不适合你,你会想用它git for-each-ref来查看你所有的 refs,并可能查看所有远程的,并准确地git ls-remote origin追踪哪些东西不属于他们完全合格的参考名称。

于 2011-02-03T20:12:56.780 回答
20

解决方案是删除分支refs/heads/refs/heads/master

git push origin :refs/heads/refs/heads/master
于 2011-02-07T10:45:07.643 回答
4

它是

git branch -r -d origin/ref/heads/master

代替

git branch -r -d origin/refs/heads/master 

在代码部分删除分支。代码中的 ref 字存在差异。

于 2012-03-17T06:12:54.720 回答