如何在git中删除格式错误的远程分支/标签?

时间:2015-05-05 14:07:10

标签: git

我不知道它是怎么发生的但是我的远程仓库在某种程度上运行了git ls-remote命令时出现了这样的分支和标签:

refs/heads/abc^{}
refs/tags/def^{}

我似乎无法以通常的方式删除它们:

git push origin :refs/heads/abc^{} 
fatal: remote part of refspec is not a valid name in :refs/heads/abc^{}

如何删除这些格式错误的远程分支?

1 个答案:

答案 0 :(得分:2)

这不是分支,它是坏分支的结果:

server$ echo echo 2e79bc84c11eda5d73add5a9dfc6bf03c50c432d > refs/heads/oogly

在这种情况下,我选择的SHA-1是带注释标签的SHA-1。你不能让“git branch”或“git checkout”指向标签,它们总是剥离提交,但你可以得到一个非git感知工具(在这种情况下像echo)到做破碎的分支。

然后,在客户端:

client$ git ls-remote
[snip]
d1574b852963482d4b482992ad6343691082412f    refs/heads/master
2e79bc84c11eda5d73add5a9dfc6bf03c50c432d    refs/heads/oogly
676699a0e0cdfd97521f3524c763222f1c30a094    refs/heads/oogly^{}
[snip]

删除服务器上的实际分支(在这种情况下为oogly,在您的abc中)将使“剥离的标记”在客户端上消失。请注意,如果要保存标记,则应在其上标记标记(如果尚未标记)。

首先如何在服务器上创建它,我不知道。

请注意,对于(带注释的)标记,这是完全正常的:服务器提供标记及其SHA-1,以及它指向的基础对象的SHA-1。语法记录在gitrevisions

   <rev>^{}, e.g. v0.99.8^{}
       A suffix ^ followed by an empty brace pair means the object could
       be a tag, and dereference the tag recursively until a non-tag
       object is found.