如何真正删除git/SourceTree上的标记

Pee*_*its 6 tags git atlassian-sourcetree sourcetree

我知道如何从SourceTree中删除标签.只需右键单击,删除并勾选"从所有遥控器中删除标记".然后执行以下操作(-c diff.mnemonicprefix=false -c core.quotepath=false为了便于阅读,我省略了标志):

git tag -d my_tag
git push -v origin :refs/tags/my_tag
Run Code Online (Sandbox Code Playgroud)

这有效.

这是问题所在.

一段时间后,其他开发人员将其功能分支推送到源,SourceTree将自动将所有本地标签推送到远程服务器.这将重新创建我刚刚删除的标签.

我知道这个想法是标签不会"被认为"被删除,例如标记版本,但有时会发生错误.

有什么建议?

小智 7

我发现的唯一解决方案就是让所有其他开发人员在从遥控器上删除它们之后删除它们的本地标签副本.我在这里找到了一个脚本帮助.

简单来说,如果你想尝试像git fetch -p -t这样的东西,那么从git版本1.9.4开始它将不起作用.

但是,有一个简单的解决方法仍然适用于最新版本:

git tag -l | xargs git tag -d # remove all local tags
git fetch -t                  # fetch remote tags
Run Code Online (Sandbox Code Playgroud)

单线可以写成:

git tag -l | xargs git tag -d && git fetch -t
Run Code Online (Sandbox Code Playgroud)

或者,您可以在〜/ .gitconfig文件中添加新别名以缩短范围:

在〜/ .gitconfig中

[alias]

     pt = !git tag -l | xargs git tag -d && git fetch -t 
Run Code Online (Sandbox Code Playgroud)

现在,您只需调用pt别名来修剪本地陈旧标记:

git pt
Run Code Online (Sandbox Code Playgroud)