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


当前回答

如果您在Git存储库中创建了一个名为release01的标记,您可以通过执行以下操作将其从存储库中删除:

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

要从Mercurial存储库中删除一个:

hg tag --remove featurefoo

请参考https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

其他回答

在终端上,执行以下操作:

git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}

现在转到Github.com并刷新,它们就会消失。

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 --force origin refs/tags/<tag_name>:refs/tags/<tag_name>

如果您正在使用PowerShell,并且希望删除其中的一部分:

# Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }

当然,您也可以在删除之前过滤它们:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }

更直接的方法是

git push --delete origin YOUR_TAG_NAME

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