291

I want to delete all the tags from a Git repository. How can I do that?

Using git tag -d tagname delete the tag tagname locally, and using git push --tags I update the tags on the git provider.

I tried:

git tag -d *

But I see that * means the files from the current directory.

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

Consider I have a lot of tags, and I want to delete them, all.

4

16 回答 16

519
git tag | xargs git tag -d

只需遵循Unix 哲学,您可以通过管道传输所有内容。

在 Windows 上使用 git bash 和相同的命令。

于 2013-10-23T13:01:30.303 回答
274

要删除远程标签(在删除本地标签之前),只需执行以下操作:

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

然后删除本地副本:

git tag | xargs git tag -d
于 2015-08-11T17:12:13.853 回答
81

在一个命令中推送删除所有标签可能更有效。特别是如果你有几百个。

在合适的非 Windows shell 中,删除所有远程标签:

git tag | xargs -L 1 | xargs git push origin --delete

然后删除所有本地标签:

git tag | xargs -L 1 | xargs git tag --delete

只要'您的标签名称中没有 a ,这应该没问题。为此,以下命令应该没问题。

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

获取行列表,将它们用引号括起来,使它们成为单行然后将该行传递给命令的其他方法可能存在。考虑到这是最终的猫剥皮环境。

于 2015-12-21T12:36:37.113 回答
38

对于使用 PowerShell 的 Windows 用户:

git tag | foreach-object -process { git tag -d $_ }

这将删除git tag通过执行返回git tag -d的每一行返回的所有标签。

于 2015-12-01T16:29:25.623 回答
32

如果您的本地存储库中没有标签,您可以删除远程标签,而无需将其带到本地存储库。

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

不要忘记将“origin”替换为您的远程处理程序名称。

于 2017-03-29T12:45:35.020 回答
29

添加到 Stefan 的答案中,缺少如何从远程删除标签。对于 windows powershell,您可以运行它来删除远程标签,然后是本地标签。

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  
于 2016-04-25T20:22:27.723 回答
15

对于 Windows 用户:

这会通过运行 git tag 并将该列表提供给 git tag -d 来删除所有本地标签:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(见于:https ://gist.github.com/RandomArray/fdaa427878952d9768b0 )

于 2015-08-24T18:58:40.310 回答
9

您还可以使用:

git tag -d $(git tag)
于 2017-01-27T12:01:43.510 回答
3

如果您有大量需要删除的上游(来源)标签,Powershell v7 支持并行 foreach:

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}
于 2020-04-21T14:02:04.870 回答
3

我必须删除带有前缀的标签

例如,我必须删除标签 v0.0.1、v0.0.2、v0.0.3、v0.0.4、v0.0.5

git tag -d $(git tag -l "v0.0.*")

分解并解释上面的陈述:

  1. 列出所有带前缀的标签

    git 标签 -l "v0.0.*"

  2. 删除标签

    git tag -d $tag_names 那条语句就是这样工作的

于 2020-04-01T06:21:25.700 回答
3

由于所有这些选项仅在 linux 中有效,因此对于任何必须处理的人来说,这里是 windows 等效的:

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t
于 2018-03-16T08:50:14.137 回答
1

要删除所有本地标签,只需运行以下命令

git tag | xargs git tag -d

通过运行上述命令删除本地标签后删除远程标签,您可以运行以下命令

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

注意:用您的远程处理程序替换原点

于 2022-02-05T07:19:55.577 回答
1

并行化和过滤的最新版本

git tag -l "v1.0.*" | xargs -L 1 | xargs git push origin --delete
git fetch origin --prune --prune-tags

第一行,从远程并行删除所有匹配的标签。第二行,通过从 git 版本v2.26.2修剪所有已删除的标签
来 更新当前存储库。

为了测试你可以添加的第一行--dry-run,我也鼓励你探索标签列表命令,它有很好的通配符和排除/包含。

于 2022-01-11T13:39:00.670 回答
1

显示所有包含“v”的标签

git tag -l | grep v | xargs -n 1 sh -c 'echo "Processing tag $0\n" && git show -s $0'
于 2020-12-09T11:00:45.990 回答
0

使用通配符模式删除本地和远程标签的单行。

TAGPATTERN="0.1.*" ; git push origin --delete $(git tag -l $TAGPATTERN) ; git tag -d $(git tag -l $TAGPATTERN)

远程标签首先被删除,因为列表是从本地生成的。

于 2021-08-13T09:05:42.027 回答
0

在本地,git 标签只是存储在.git/refs/tags子文件夹中的磁盘上的文件。

您可以cd .git/refs/tags使用您最喜欢的删除文件的方法(rm *从文件资源管理器 UI 中删除等)删除存储在那里的所有文件

于 2021-11-09T10:46:50.777 回答