从Git存储库中删除所有标记

Ion*_*zău 195 git git-tag

我想删除Git存储库中的所有标记.我怎样才能做到这一点?

使用git tag -d tagnametagname本地删除标记,并使用git push --tags我更新git提供程序上的标记.

我试过了:

git tag -d *
Run Code Online (Sandbox Code Playgroud)

但我看到这*意味着当前目录中的文件.

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...
Run Code Online (Sandbox Code Playgroud)

考虑我有很多标签,我想删除它们.

Flo*_*ine 368

git tag | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)

只需使用管理所有内容的Linux哲学.在Windows上使用git bash使用相同的命令.

  • 谢谢.此命令删除本地标记.我用`git tag -l | xargs -n 1 git push --delete origin`从远程删除它们. (120认同)
  • 在Windows上? (7认同)
  • @CoDEmanX在Windows上,你应该使用相同命令的git bash. (6认同)
  • 在尝试删除标签之前,不要忘记运行“git fetch --all --tags --prune”。 (3认同)
  • 不删除远程标签,数千个标签也很慢。 (2认同)
  • 在 Windows 10 上,“xargs”未被识别为内部或外部命令 (2认同)

kar*_*gen 172

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

git tag -l | xargs -n 1 git push --delete origin
Run Code Online (Sandbox Code Playgroud)

然后删除本地副本:

git tag | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)

  • 如果您有很多远程标记,则此答案会更快:http://stackoverflow.com/a/34395864/747044 (3认同)

Ric*_*ing 45

在一个命令中删除所有标记可能更有效.特别是如果你有几百个.

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

git tag | xargs -L 1 | xargs git push origin --delete
Run Code Online (Sandbox Code Playgroud)

然后删除所有本地标签:

git tag | xargs -L 1 | xargs git tag --delete
Run Code Online (Sandbox Code Playgroud)

只要'您的标签名称中没有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
Run Code Online (Sandbox Code Playgroud)

获取行列表,将它们包装在引号中,使它们成为单行,然后将该行传递给命令的其他方法可能存在.考虑到这是最终的猫皮肤环境和所有.

  • 我有几千个标签,从远程云回购逐个删除它们需要几天,这解决了. (3认同)

小智 22

对于使用PowerShell的Windows用户:

git tag | foreach-object -process { git tag -d $_ }
Run Code Online (Sandbox Code Playgroud)

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

  • `git 标签 | foreach-object -process { git tag -d $_ && git push --delete origin $_ }` 如果您还想删除远程中的标签。它将“git push --delete ...”将每个标签一一删除,如果标签很多,这可能需要一些时间。有谁知道如何更有效地做到这一点? (4认同)

小智 21

添加到Stefan的答案,该答案忽略了如何从远程删除标签.对于Windows PowerShell,您可以运行此命令首先删除远程标记,然后删除本地标记.

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  
Run Code Online (Sandbox Code Playgroud)


Dav*_*opa 17

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

git tag | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)

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

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
Run Code Online (Sandbox Code Playgroud)

注意:将 origin 替换为您的远程处理程序


Val*_*ura 15

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

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
Run Code Online (Sandbox Code Playgroud)

不要忘记将"origin"替换为远程处理程序名称.


Gig*_*m02 10

对于Windows用户:

这会删除所有本地标记,方法是运行git标记并将该列表提供给git tag -d:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a
Run Code Online (Sandbox Code Playgroud)

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


Bra*_*ang 8

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

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

git tag -d $(git tag -l "v0.0.*")
Run Code Online (Sandbox Code Playgroud)

分解并解释上面的语句:

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

    git tag -l“v0.0.*”

  2. 删除标签

    git tag -d $tag_names git tag -d $tag_names

这就是该声明的作用


ViZ*_*eke 6

您还可以使用:

git tag -d $(git tag)
Run Code Online (Sandbox Code Playgroud)