如何删除已推送的Git标记?
当前回答
用于数千个远程标签的速度快100倍
在阅读了这些答案,同时需要删除11000多个标签之后,我了解到这些方法依赖于xargs,或者xargs耗时太长,除非你有几个小时可以燃烧。
在挣扎中,我找到了两种更快的方法。对于这两种情况,从git-tag或git-ls-remote-tag开始,列出要删除的远程标记。在下面的示例中,您可以省略sorting_processing_etc,或将其替换为所需的任何greping、sorting、tailing或head(例如grep-P“my_regex”|sort|head-n-200等):
第一种方法是迄今为止最快的,可能比使用xargs快20到100倍,一次至少可以处理几千个标签。
git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
这是如何工作的?正常的、以行分隔的标记列表被转换为一行以空格分隔的标记,每个标记都以:so。
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
将git push与此格式标记一起使用,不会将任何内容推送到每个远程引用中,并将其删除(以这种方式推送的正常格式是local_ref_path:remote_ref_path)。
方法二在同一页的其他地方作为单独的答案
在这两种方法之后,您可能也希望删除本地标记。这要快得多,所以我们可以返回使用xargs和git标记-d,这就足够了。
git tag | sorting_processing_etc | xargs -L 1 git tag -d
或类似于远程删除:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
其他回答
对于乌龟数字用户,在数百个标记的范围内,您可以使用UI一次删除多个标记,但UI隐藏在上下文菜单下。
从资源管理器窗口右键单击->浏览引用->右键单击ref/remotes/name->选择“删除远程标记”
看见https://tortoisegit.org/docs/tortoisegit/tgit-dug-browse-ref.html
更直接的方法是
git push --delete origin YOUR_TAG_NAME
在这种情况下,IMO前缀冒号语法有点奇怪
我想删除所有标签,除了那些与模式匹配的标签,这样我就可以删除除最后几个月的生产标签之外的所有标签,这是我取得巨大成功的原因:
删除所有远程标记并从删除中排除表达式
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
删除所有本地标记并从删除中排除表达式
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
如果您有一个远程标签v0.1.0要删除,并且您的远程标签是源,那么只需:
git push origin :refs/tags/v0.1.0
如果您还需要在本地删除标记:
git tag -d v0.1.0
有关Git异常的解释,请参见Adam Franco的回答:删除语法。
请注意,如果您有一个名为远程标记的远程分支,那么这些命令是不明确的:
git push origin :tagname
git push --delete origin tagname
因此,必须使用此命令删除标记:
git push origin :refs/tags/<tag>
这一个删除分支:
git push origin :refs/heads/<branch>
如果没有,则会出现如下错误:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
推荐文章
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录
- 如何在GitHub上创建自己的存储库?