10

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

git tag -d my_tag
git push -v origin :refs/tags/my_tag

这行得通。

这是问题所在。

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

我知道这个想法是标签不是“应该”被删除的,例如标签发布,但有时会发生错误。

有什么建议吗?

4

1 回答 1

12

我找到的唯一解决方案是在您从远程删除标签后,简单地要求所有其他开发人员删除他们的本地标签副本。我在这里找到了脚本帮助。

简而言之,如果您尝试执行 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

单线可以写成:

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

或者,您可以在 ~/.gitconfig 文件中添加一个新别名以缩短内容:

在 ~/.gitconfig

[alias]

     pt = !git tag -l | xargs git tag -d && git fetch -t 

现在,您可以简单地调用 pt alias 来修剪本地过时的标签:

git pt
于 2016-07-22T00:58:45.023 回答