如何删除git中格式错误的远程分支/标记?
我不知道这是怎么发生的,但不知何故,当我运行如何删除git中格式错误的远程分支/标记?,git,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^{} 如何删除这些格式不正确的远程分支?这不是一个分支,而是一个错误
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^{}
如何删除这些格式不正确的远程分支?这不是一个分支,而是一个错误分支的结果:
server$ echo echo 2e79bc84c11eda5d73add5a9dfc6bf03c50c432d > refs/heads/oogly
在本例中,我选择的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。语法记录在:
^{},例如v0.99.8^{}
后缀“^”后跟空大括号对表示对象可以
是一个标记,并递归地取消对该标记的引用,直到找到一个非标记为止
对象被找到。
您正在使用什么存储库?在GitHub中,在远程(也可能在BitBucket上)删除此分支是很简单的。我看不到一个界面可以在那里做这件事。你有没有试过简单地
git-push-origin:abc^{}
?您使用的是哪种服务?@isherwood是的,我也尝试过简化推送。不知道你说的服务是什么意思?我正在使用Gitlab。@VonC您以前见过这个问题吗?很有趣!你的技术奏效了。。。我制作了一个临时标记来保存位置,然后删除了基础的refs/heads/abc分支,正如您所假设的那样,它与坏分支/标记之间有1:1的相关性,然后最终只是重新创建了标记/分支。成功了!抱歉,我必须回溯一点:1)其中一些格式错误的分支实际上已经是标记,2)删除基础标记可以解决问题,但推上新创建的替换标记会再次产生问题!
<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.