我想删除Git存储库中的所有标记。我怎么能这样做?
使用git tag -d tagname
在本地删除标记tagname
,并使用git push --tags
更新git提供程序上的标记。
我试过了:
git tag -d *
但我发现*
表示当前目录中的文件。
$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...
考虑我有很多标签,我想删除所有标签。
答案 0 :(得分:339)
git tag | xargs git tag -d
只需使用管理所有内容的Linux哲学。在Windows上使用git bash和相同的命令。
答案 1 :(得分:150)
要删除远程标记(删除本地标记之前),只需执行以下操作:
git tag -l | xargs -n 1 git push --delete origin
然后删除本地副本:
git tag | xargs git tag -d
答案 2 :(得分:39)
在一个命令中推送删除所有标记可能更有效。特别是如果你有几百个。
在合适的非Windows shell中,删除所有远程标记:
git tag | xargs -L 1 | xargs git push origin --delete
然后删除所有本地标签:
git tag | xargs -L 1 | xargs git tag --delete
只要您的代码名称中没有'
,这就没问题。为此,以下命令应该没问题。
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
获取行列表,将它们包装在引号中,使它们成为单行,然后将该行传递给命令的其他方法可能存在。考虑到这是最终的猫皮肤环境和所有。
答案 3 :(得分:21)
对于使用PowerShell的Windows用户:
git tag | foreach-object -process { git tag -d $_ }
通过对返回的每一行执行git tag
,删除git tag -d
返回的所有标记。
答案 4 :(得分:21)
添加了Stefan的答案,该答案忽略了如何从远程删除标签。对于Windows PowerShell,您可以运行此命令首先删除远程标记,然后删除本地标记。
git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }
答案 5 :(得分:11)
如果您没有本地仓库中的标签,则可以删除远程标签,而无需将其转移到本地仓库。
git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
别忘了更换" origin"到您的远程处理程序名称。
答案 6 :(得分:10)
对于Windows用户:
这会删除所有本地标记,方法是运行git标记并将该列表提供给git tag -d:
FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a
(发现于:https://gist.github.com/RandomArray/fdaa427878952d9768b0)
答案 7 :(得分:5)
您也可以使用:
git tag -d $(git tag)
答案 8 :(得分:1)
我必须删除带有前缀的标签
例如,我必须删除标签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 那条语句就是这样
答案 9 :(得分:1)
如果您有许多需要删除的上游(原始)标签,Powershell v7支持并行foreach:
git tag | foreach-object -Parallel {
git push origin --delete $_
git tag -d $_
}
答案 10 :(得分:0)
由于所有这些选项仅适用于linux,因此这里的窗口等同于任何必须处理的人:FOR /F usebackq %t IN (
git tag ) DO @git tag --delete %t
答案 11 :(得分:0)
显示所有包含“ v”的标签
#include <iostream>
#include <tuple>
struct foo {
foo() = default;
foo(const foo&) = delete; // not copyable for the sake of this demo
foo(foo&&) = default; // but moveable
foo& operator=(const foo&) = delete;
foo& operator=(foo&&) = default;
int a;
};
int main() {
foo w, x, y{3}, z{4};
std::tie(w, x) = std::tuple(std::move(y), std::move(z));
std::cout << w.a << x.a << '\n'; // prints 34
}