如何删除已推送的Git标记?
当前回答
如果您使用SourceTree(一个很棒的Git GUI),那么您可以通过执行以下操作在不使用命令行的情况下轻松完成此操作:
在SourceTree中打开存储库选择并展开左侧的“标签”选项卡右键单击要删除的标记选择“删除YOUR_TAG_NAME”在验证窗口中,选择“从远程设备删除标记”
YOUR_TAG_NAME现在将从您的本地存储库和所有远程设备中删除,无论是GitHub、BitBucket,还是您列为该存储库远程设备的任何地方。
此外,如果您在本地删除了一个标记,但没有在远程源上删除,并且您想在任何地方删除它,那么只需创建一个新标记,该标记具有相同的名称,并在与源相同的提交时附加。然后,重复上述步骤删除所有位置。
其他回答
我只是想分享我创建的别名,它做了同样的事情:
将以下内容添加到~/.gitconfig中
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
git push --delete origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
用法如下:
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)
要删除远程存储库上的标记,可以使用
git push <remote> :refs/tags/<tagname>
解释上述内容的方法是将其读取为空值,即冒号被推送到远程标记名称之前的值。
要从远程存储库中删除标记,请执行以下操作:
git push --delete origin TAGNAME
您可能还想在本地删除标记:
git tag -d TAGNAME
如果您在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
用于数千个远程标签的速度快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 " ")
推荐文章
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录
- 如何在GitHub上创建自己的存储库?