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


当前回答

这里已经有很多很好的答案,但如果您需要删除所有标记,可以使用以下使用PowerShell的命令行:

foreach($tag in(git tag)){git tag-d$tag.Trim();git push origin:refs/tags/$tag}

在这里,我们得到所有标签的列表,删除每个本地标签,然后删除远程标签(在GitHub上测试)。

其他回答

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

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

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

如果您创建了一个以#字符开头的标记,例如#ST002,您可能会发现无法使用正常模式删除。即

git tag -d #STOO2

不会删除标记,而是将其包装为字符串文字

git tag -d "#ST002" or git tag -d '#ST002'

这将使其被删除。希望它能帮助那些错误使用#来写标签名的人。

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

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 <remote> :refs/tags/<tagname>

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

更直接的方法是

git push --delete origin YOUR_TAG_NAME

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