删除多个git远程标记并按一次

Kan*_*arG 11 tags git

在Git中,如何在推送之前删除多个标签?

我知道如何一次使用一个标签.不确定是否可以做多个.

zig*_*arn 35

要删除本地多个标签:git tag:

git tag -d <tagname> ...

简单地说:

git tag -d TAG1 TAG2 TAG3
Run Code Online (Sandbox Code Playgroud)

要远程删除多个标签:git push:

git push [-d | --delete] [<repository> [<refspec> ...]]

简单地说:

git push ${REMOTE_NAME:-origin} --delete TAG1 TAG2 TAG3
Run Code Online (Sandbox Code Playgroud)

  • 只是为了为后代添加 2p,这是两个命令,而不是一个:第一个 `git tag -d ...` 然后是 `git push origin --delete ...` (2认同)

小智 13

如果您有太多标签(就像我们的例子),您可能需要这样做:

git tag -l > tags_to_remove.txt
Run Code Online (Sandbox Code Playgroud)

然后在您的首选编辑器中编辑文件 - 查看并删除您想要保留的标签(如果有),然后在本地运行它

git tag -d $(cat ./tags_to_remove.txt)
Run Code Online (Sandbox Code Playgroud)

并远程:

git push -d origin $(cat ./tags_to_remove.txt)
Run Code Online (Sandbox Code Playgroud)

  • 我也喜欢模式匹配的答案,但对我来说,这是最好的答案。我不会经常清理标签,因此我不介意以这种方式手动验证列表的步骤。 (2认同)

小智 11

我发现了一个简单的方法来做到这一点,如果你有grepxargs安装.我无耻地从https://gist.github.com/shsteimer/7257245获取此信息.

使用您要查找的模式删除所有远程标记:

git tag | grep <pattern> | xargs -n 1 -I% git push origin :refs/tags/%
Run Code Online (Sandbox Code Playgroud)

删除所有本地标记:

git tag | xargs -n 1 -I% git tag -d %
Run Code Online (Sandbox Code Playgroud)

获取仍然存在的远程标记:

git fetch
Run Code Online (Sandbox Code Playgroud)


Aec*_*Liu 10

它将删除所有匹配的标记模式。

//Delete remote:
git push -d origin $(git tag -l "tag_prefix*")

// Delete local:
git tag -d $(git tag -l "tag_prefix*")

// Examples:
git tag -d $(git tag -l "v1.0*")
git push -d origin $(git tag -l "*v3.[2]*-beta*")
Run Code Online (Sandbox Code Playgroud)

  • 如果您像我一样首先删除了本地标签,则可以通过以下方式从远程枚举标签: `git push -d origin $(git ls-remote --tags origin -l "tag_prefix*" | awk '{print $2} ')` (4认同)
  • 效果很好。请记住,如果您打算删除本地和远程,则首先删除远程是有意义的,因为git否则将无法在本地找到标签。 (2认同)

Fra*_*sco 5

您可以通过指定要删除的所有标签,用一个命令删除多个标签

git tag -d 1.1 1.2 1.3
Run Code Online (Sandbox Code Playgroud)

然后你可以推送所有删除的标签。当然,您可以在推送之前使用单独的命令删除标签。

要推送删除标签,只需列出您要删除的所有标签。删除一个标签的命令相同

git push --delete origin 1.1 1.2 1.3
Run Code Online (Sandbox Code Playgroud)