我想从Git存储库中删除所有标记。我该怎么做呢?

使用git tag -d tagname在本地删除标签tagname,并使用git push——tags更新git provider上的标签。

我试着:

git tag -d *

但是我看到*表示当前目录中的文件。

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

假设我有很多标签,我想全部删除它们。


当前回答

因为所有这些选项都只在linux中工作,下面是windows中必须处理这些问题的等效选项:

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

其他回答

对于使用PowerShell的Windows用户:

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

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

因为所有这些选项都只在linux中工作,下面是windows中必须处理这些问题的等效选项:

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

对于windows,这样做是为了删除远程标记:

git fetch --tags
git push origin --delete $(git tag -l)

并行化和过滤了最新版本

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

第一行,并行地从remote中删除所有匹配的标记。 第二行,从git v2.26.2版本中删除所有已删除的标记,从而更新当前的repo。

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

windows用户:

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

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

(网址:https://gist.github.com/RandomArray/fdaa427878952d9768b0)