如何删除已推送的Git标记?


当前回答

gitpush--delete origin$TAGNAME是正确的方法(除了本地删除之外)。

但是:确保使用Git 2.31+(2021第一季度)。

“git-push$there--delete”(man)本应被诊断为一个错误,但却变成了一个匹配的push,已使用git 2.31(2021第1季度)进行了更正。

参见Junio C Hamano(gitster)提交的20e4164(2021 2月23日)。(由Junio C Hamano——gitster——于2021 2月25日提交1400458合并)

push:不要将--delete“”转换为匹配的push通知人:Tilman Vogel

当我们将语法糖“git push remote--delete”(man)<ref>添加到“git推送”(man)中,作为标准git pushremote(man)的同义词:语法在f517f1f(“内置推送:add(man)--delete as syntax sugar for:foo”,2009-12-30,git v1.7.0-rc0--merge)中时,我们没有足够谨慎地确保<ref>不为空。盲目地将“--delete<ref>”重写为“:<ref>“意味着空字符串<ref>将导致refspec“:”,这是要求“匹配”推送的语法,但不删除任何内容。更糟糕的是,如果有匹配的引用可以快速转发,那么即使用户觉得它们还没有准备好推出,它们也会过早发布,这将是一场真正的灾难。

其他回答

要删除远程存储库上的标记,可以使用

git push <remote> :refs/tags/<tagname>

解释上述内容的方法是将其读取为空值,即冒号被推送到远程标记名称之前的值。

git tag -d your_tag_name
git push origin :refs/tags/your_tag_name

第一行从本地回购中删除your_tag_name,第二行从远程回购中删除您的_tag_name。

对于使用GitHub的人来说,还需要一个步骤:丢弃草稿。

要从远程存储库中删除标记,请执行以下操作:

git push --delete origin TAGNAME

您可能还想在本地删除标记:

git tag -d TAGNAME

其他答案指出了如何实现这一点,但您应该记住后果,因为这是一个远程存储库。

git标签手册页的On Retagging部分很好地解释了如何礼貌地将更改通知远程回购的其他用户。他们甚至提供了一个方便的公告模板,用于传达其他人应该如何获得您的更改。

更直接的方法是

git push --delete origin YOUR_TAG_NAME

在这种情况下,IMO前缀冒号语法有点奇怪