我们在git中使用标签作为部署过程的一部分。有时,我们希望通过从远程存储库中删除这些标记来清理它们。
这很简单。一个用户在一组命令中删除了本地标签和远程标签。我们有一个结合了这两个步骤的shell脚本。
第二个(第3个,第4个,……)用户现在拥有不再反映在远程上的本地标记。
我正在寻找一个类似于git远程修剪起源的命令,清理本地跟踪分支,其中远程分支已被删除。
或者,可以使用一个简单的命令来列出远程标记,与通过git tag -l返回的本地标记进行比较。
我们在git中使用标签作为部署过程的一部分。有时,我们希望通过从远程存储库中删除这些标记来清理它们。
这很简单。一个用户在一组命令中删除了本地标签和远程标签。我们有一个结合了这两个步骤的shell脚本。
第二个(第3个,第4个,……)用户现在拥有不再反映在远程上的本地标记。
我正在寻找一个类似于git远程修剪起源的命令,清理本地跟踪分支,其中远程分支已被删除。
或者,可以使用一个简单的命令来列出远程标记,与通过git tag -l返回的本地标记进行比较。
当前回答
TortoiseGit现在可以比较标签了。
左边是远程日志,右边是本地日志。
使用同步对话框的比较标签功能:
另见TortoiseGit 2973期
其他回答
TortoiseGit现在可以比较标签了。
左边是远程日志,右边是本地日志。
使用同步对话框的比较标签功能:
另见TortoiseGit 2973期
与@Richard W的答案相同,但适用于Windows (PowerShell)
git tag | ForEach-Object -Process { git tag -d $_ }
git fetch -t
从Git v1.7.8到v1.8.5.6,你可以这样使用:
git fetch <remote> --prune --tags
更新
这在较新的git版本(从v1.9.0开始)上不起作用,因为提交了e66ef7ae6f31f2。我并不想删除它,因为它确实对一些人有用。
根据“Chad Juliano”的建议,对于v1.7.8以来的所有Git版本,您可以使用以下命令:
git fetch --prune <remote> +refs/tags/*:refs/tags/*
你可能需要用引号将标签部分括起来(例如在Windows上),以避免通配符展开:
git fetch --prune <remote> "+refs/tags/*:refs/tags/*"
注意:在所有这些情况下,可能是“origin”或任何您通常引用的远程。
Git本身支持清除本地标记
git fetch --tags --prune-tags
该命令提取最新的标记并删除所有已删除的标记
在新的git版本(如v2.26.2或更高版本)中,您可以使用——prune-tags
- p ——prune-tags 在获取之前,如果启用了——prune,则删除远程上不再存在的任何本地标记。这个选项应该更谨慎地使用,不像——prune它将删除已经创建的任何本地引用(本地标记)。这个选项是提供显式标记refspec和——prune的简写,请参阅其文档中关于它的讨论。
所以你需要运行:
git fetch origin --prune --prune-tags