例如,我想强制将我的标签推1.0.0送到我的远程master分支。
1.0.0
master
我现在正在执行以下操作:
git push production +1.0.0:master
我想强制 push ,因为我关心的是标签内的1.0.0代码被推送到master远程存储库的分支。
我究竟做错了什么?
当我 SSH 到我的Git存储库所在的服务器并执行git branch -l时,我也没有看到master列出的分支。
git branch -l
从远程 Git 存储库中运行后git tag -l,我看到它master已列出,这意味着当我运行以下命令时:
git tag -l
git push production 1.0.0:master
它实际上推送了标签并 创建了一个名为 master而不是 新分支 的标签。
我想基本上将标签的 内容1.0.0推送到master远程 Git 存储库的分支中。
它可能会失败,因为它1.0.0是一个带注释的标签。也许您看到了以下错误消息:
错误:试图将非提交对象写入分支 refs/heads/master
带注释的标签有自己独特的对象类型,指向带标签的提交对象。分支不能有用地指向标记对象,只能提交对象。您需要“删除”带注释的标签以提交对象并推送它。
git push production +1.0.0^{commit}:master git push production +1.0.0~0:master # shorthand
在这种情况下还有另一种语法也可以使用,但是如果标记对象指向的不是提交(或指向(指向“”的标记对象)提交的标记对象),则它的含义略有不同)。
git push production +1.0.0^{}:master
这些标签剥离语法在 git-rev- parse(1) 中的Specifying Revisions中进行了描述。