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


当前回答

如果您正在使用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 tag -d your_tag_name
git push origin :refs/tags/your_tag_name

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

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

对于乌龟数字用户,在数百个标记的范围内,您可以使用UI一次删除多个标记,但UI隐藏在上下文菜单下。

从资源管理器窗口右键单击->浏览引用->右键单击ref/remotes/name->选择“删除远程标记”

看见https://tortoisegit.org/docs/tortoisegit/tgit-dug-browse-ref.html

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

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>'

更直接的方法是

git push --delete origin YOUR_TAG_NAME

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