如何删除已推送的Git标记?
当前回答
其他答案指出了如何实现这一点,但您应该记住后果,因为这是一个远程存储库。
git标签手册页的On Retagging部分很好地解释了如何礼貌地将更改通知远程回购的其他用户。他们甚至提供了一个方便的公告模板,用于传达其他人应该如何获得您的更改。
其他回答
我想删除所有标签,除了那些与模式匹配的标签,这样我就可以删除除最后几个月的生产标签之外的所有标签,这是我取得巨大成功的原因:
删除所有远程标记并从删除中排除表达式
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
您可以将“空”引用推送到远程标记名:
git push origin :tagname
或者,更明确地说,使用--delete选项(如果git版本早于1.8.0,则使用-d):
git push --delete origin tagname
注意,git具有标记名称空间和分支名称空间,因此您可以对分支和标记使用相同的名称。如果要确保不会意外删除分支而不是标记,可以指定full ref,该ref将永远不会删除分支:
git push origin :refs/tags/tagname
如果还需要删除本地标记,请使用:
git tag --delete tagname
出身背景
将分支、标记或其他引用推送到远程存储库涉及指定“哪个repo、哪个源、哪个目标?”
git push remote-repo source-ref:destination-ref
将主分支推到原点的主分支的真实世界示例是:
git push origin refs/heads/master:refs/heads/master
由于默认路径,可以缩短为:
git push origin master:master
标记的工作方式相同:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
也可以缩短为:
git push origin release-1.0:release-1.0
通过省略源ref(冒号之前的部分),可以将“nothing”推送到目标,删除远程端的ref。
如果您在Git存储库中创建了一个名为release01的标记,您可以通过执行以下操作将其从存储库中删除:
git tag -d release01
git push origin :refs/tags/release01
要从Mercurial存储库中删除一个:
hg tag --remove featurefoo
请参考https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
请注意,如果您有一个名为远程标记的远程分支,那么这些命令是不明确的:
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>'
似乎xargs已经做了很多工作。回顾这篇文章,我猜你所经历的xargs的缓慢是因为最初的答案使用了xargs-n 1,而实际上并不需要。
除了xargs自动处理最大命令行长度之外,这与方法1等效:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs也可以并行运行进程。使用xargs的方法2:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
上面最多使用5个进程来处理每个进程中最多100个参数。你可以尝试这些论点,以找到最适合你的需求的东西。
推荐文章
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- git如何显示不存在于.gitignore中的未跟踪文件
- Git错误:遇到7个文件应该是指针,但不是