【问题标题】:Git force push tag when the tag already exists on remote当标签已经存在于远程时​​,Git 强制推送标签
【发布时间】: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 的方法来删除远程标签?
  • 通常您可以强制推送标签,但遥控器可以禁止它。通常,您可以删除遥控器上的标签,但遥控器也可以禁止这样做。如果遥控器足够严格,您将不得不让可以直接访问的人来更新遥控器。另见stackoverflow.com/questions/19298600/…
  • 好的。我假设 -f 应该始终强制更新远程标签。我将使用我添加的删除和重新创建逻辑来做到这一点。感谢您的回复。
  • 奇怪的是,git push origin <tag> -f 在 git 2.28 上为我工作

标签: git git-tag


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 2011-07-08
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        相关资源
        最近更新 更多