我不知道它是怎么发生的但是我的远程仓库在某种程度上运行了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^{}
如何删除这些格式错误的远程分支?
答案 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.