如何删除不在我本地存储库上的远程标签?

时间:2014-10-06 20:53:13

标签: regex git bash grep

我想让原点与我的本地标签相匹配。这不要与修剪本地标签混淆,而是远程修改。

修剪本地标记并使我的本地存储库匹配来源:

git tag -l | xargs git tag -d
git fetch

我在本地清理了标签,我想推送并删除遥控器中没有的内容。

我一直在手动做,如:

git tag -l | grep -v "[^v2]" | xargs git tag -d  # remove local tags that don't match a pattern
git push origin :refs/tags/2.2.15      # manually remove those tags on remote
git push origin :refs/tags/2.2.16
git push origin :refs/tags/2.2.17
git push origin :refs/tags/2.2.18
...

但是有这么多标签我觉得这可以用不同的方式完成。 那么问题是,如何从远程存储库中删除那些本地没有的标记?

1 个答案:

答案 0 :(得分:1)

刚刚在远程仓库上测试它并且工作正常。

我使用cut代替grep,并将远程标记与本地标记进行比较,然后删除了不同的远程标记。

git ls-remote --tags origin | cut -f 2 | xargs basename | comm -23 - <(git tag) | awk '{print ":refs/tags/" $0}'  | xargs git push origin

这不是世界上最优雅的东西,但它确实有效。