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


当前回答

删除本地标记“12345”

git tag -d 12345

删除远程标记“12345”(例如,GitHub版本也是)

git push origin :refs/tags/12345

替代方法

git push --delete origin tagName
git tag -d tagName

其他回答

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 tag -l | xargs git tag -d
git fetch

删除所有远程标记

git tag -l | xargs -n 1 git push --delete origin

清理本地标记

git tag -l | xargs git tag -d

这两个步骤效果很好:

# delete local tag '1.0.0'
git tag -d 1.0.0

# delete remote tag '1.0.0' (eg, GitHub version too)
git push origin :refs/tags/1.0.0

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

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

请注意,如果您有一个名为远程标记的远程分支,那么这些命令是不明确的:

git push origin :tagname
git push --delete origin tagname

因此,必须使用此命令删除标记:

git push origin :refs/tags/<tag>

这一个删除分支:

git push origin :refs/heads/<branch>

如果没有,则会出现如下错误:

error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'