如何删除已推送的Git标记?
当前回答
正如@CubanX所建议的,我将这个答案与我的原始答案分开:
这里有一种方法,它比xargs快几倍,并且可以通过调整进行扩展。它使用Github API(一种个人访问令牌),并并行利用该实用程序。
git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
parallel有许多操作模式,但通常会将您给出的任何命令并行化,同时允许您设置进程数量的限制。您可以更改--jobs 2参数以允许更快的操作,但我对Github的速率限制有问题,目前为5000/hr,但似乎也有未记录的短期限制。
在此之后,您可能还想删除本地标记。这要快得多,所以我们可以返回使用xargs和git标记-d,这就足够了。
git tag | sorting_processing_etc | xargs -L 1 git tag -d
其他回答
从本地和源位置删除给定标记的简单脚本。检查标签是否真的存在。
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git push --delete origin $1
echo done.
else
echo tag named "$1" was not found
fi
如何使用:
创建shell脚本文件(例如gittagpurge.sh)并粘贴内容。chmod脚本文件以使其可执行。使脚本全局可用cd到git项目调用脚本(例如$>git-tag-purge.sh tag_name)
其他答案指出了如何实现这一点,但您应该记住后果,因为这是一个远程存储库。
git标签手册页的On Retagging部分很好地解释了如何礼貌地将更改通知远程回购的其他用户。他们甚至提供了一个方便的公告模板,用于传达其他人应该如何获得您的更改。
这对我有用
git push --force origin refs/tags/<tag_name>:refs/tags/<tag_name>
您可以将“空”引用推送到远程标记名:
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 fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
现在转到Github.com并刷新,它们就会消失。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别