当标签已经存在于远程时,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 强制推送标签的主要内容,如果未能解决你的问题,请参考以下文章