当标签已经存在于远程时​​,Git 强制推送标签

Posted

技术标签:

【中文标题】当标签已经存在于远程时​​,Git 强制推送标签【英文标题】:Git force push tag when the tag already exists on remote 【发布时间】:2014-11-07 01:35:26 【问题描述】:

我已经将标签推送到遥控器上。当另一个用户创建相同的标签并尝试推送时,推送将失败,因为该标签已经存在于远程。

但我想如果我做了--f force tag push,它应该可以工作。但这不是我看到的。

我想我必须这样做。

 Create tag
 Push tag -> If push fails -> Delete tag on remote
                           -> push tag again.

这是正确的吗?强制推送标签不应该解决这个问题吗?

我正在使用带注释的标签

 git -a v1.0 -f -m "message"

【问题讨论】:

您是否尝试过类似 git push origin :refs/tags/tag_name 的方法来删除远程标签? 通常您可以强制推送标签,但遥控器可以禁止它。通常,您可以删除遥控器上的标签,但遥控器也可以禁止这样做。如果遥控器足够严格,您将不得不让可以直接访问的人来更新遥控器。另见***.com/questions/19298600/… 好的。我假设 -f 应该始终强制更新远程标签。我将使用我添加的删除和重新创建逻辑来做到这一点。感谢您的回复。 这能回答你的问题吗? “tag already exists in the remote" error after recreating the git tag 奇怪的是,git push origin <tag> -f 在 git 2.28 上为我工作 【参考方案1】:

在我的例子中,当标签已经存在时,远程拒绝强制推送。

所以,当推送被拒绝时,我做到了

git push --delete origin tagname 

并推送新标签。

请参阅 Torek 对我的问题的评论。有一种情况,远程也可以拒绝删除。

【讨论】:

【参考方案2】:

这将强制推送所有标签并覆盖现有标签。

git push -f --tags

【讨论】:

很好的答案,谢谢。或者,如果您的遥控器未命名为“origin”,则git push <remote name> -f --tags 不推荐这样做,因为它会推送所有本地标签,并且通常会错误地创建不应推送的陈旧/仅本地标签。【参考方案3】:

如果您收到fatal: tag 'beta' already exists 错误,请使用

git tag -a beta --force  #To create tag locally
git push -f --tags #To push your tag to the repository

【讨论】:

【参考方案4】:

首先,删除要在远程替换的标签:

git push origin --delete <tag-name>

然后将你的标签推送到远程:

git push --tags

【讨论】:

以上是关于当标签已经存在于远程时​​,Git 强制推送标签的主要内容,如果未能解决你的问题,请参考以下文章

如何删除名为@的Git远程标签

2022-03-02 如何修改git 已经推送的log日志

08-git-打标签(tag)

git以及sourcetree使用问题

github远程标签推送,无需克隆repo

git tags 管理