例如,我想强制将标记1.0.0推到远程主分支。

我现在正在做以下事情:

git push production +1.0.0:master

我希望强制推送,因为我只关心1.0.0标记内的代码是否被推送到远程存储库上的主分支。

我做错了什么?

Update # 1

当我SSH到我的服务器,我的Git存储库,并执行Git分支-l,我也没有看到主分支列出。

更新# 2

在远程git存储库中运行git标记-l后,我看到master被列出,这意味着当我运行以下命令时:

git push production 1.0.0:master

它实际上推送了标记,并创建了一个名为master的标记,而不是一个新的分支。

我希望将标记1.0.0的内容推入远程Git存储库的主分支。


git push --tags production

它可能会失败,因为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)中描述。


我创建这样的标签,然后我把它推到GitHub:

git tag -a v1.1 -m "Version 1.1 is waiting for review"
git push --tags

Counting objects: 1, done.
Writing objects: 100% (1/1), 180 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1

推送单个标签:git push <reponame> <tagname>

例如,git推出产品1.0.0。标记不绑定到分支,而是绑定到提交。

当您希望在主分支中拥有标记的内容时,请在您的机器上进行本地操作。我假设您继续在本地主分支中进行开发。然后只需一个git push origin master就足够了。