我想从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.
...
假设我有很多标签,我想全部删除它们。
我想从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.
...
假设我有很多标签,我想全部删除它们。
当前回答
并行化和过滤了最新版本
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,我还鼓励您探索标记列表命令,它有很好的通配符和排除/包含。
其他回答
git tag | xargs git tag -d
简单地遵循Unix哲学,即管道处理所有内容。
在Windows上使用相同的命令使用git bash。
我必须删除带有前缀的标签
例如,我必须删除标签v0.0.1, v0.0.2, v0.0.3, v0.0.4, v0.0.5
git tag -d $(git tag -l "v0.0.*")
分解并解释上面的语句:
列出所有带有前缀的标签 Git标签-l "v0.0.*" 删除标签 Git标记-d $tag_names
这就是这个表述的原理
使用通配符模式删除本地和远程标记的一行代码。
TAGPATTERN = " 0.1。*”;——删除$(git标签-l $TAGPATTERN);git标签-d $(git标签-l $TAGPATTERN)
远程标记首先被删除,因为列表是从本地生成的。
对于windows,这样做是为了删除远程标记:
git fetch --tags
git push origin --delete $(git tag -l)
如果你有很多upstream (origin)标签需要删除,Powershell v7支持parallel foreach:
git tag | foreach-object -Parallel {
git push origin --delete $_
git tag -d $_
}