如何使用refspec将Git标签推送到分支?

How do you push a Git tag to a branch using a refspec?

例如,我想强制将我的标签1.0.0推到远程master分支。

我现在要做的是:

1
git push production +1.0.0:master

我想强制推送,因为我只关心1.0.0标记内的代码被推送到远程存储库的master分支。

我做错什么了?

更新1

当我ssh到我的git存储库所在的服务器并执行git branch -l时,我也看不到master分支列出。

更新2

在从远程Git存储库中运行git tag -l之后,我看到master已列出,这意味着当我运行以下程序时:

1
git push production 1.0.0:master

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

我想基本上将标签1.0.0的内容推送到远程git存储库的master分支中。


1
git push --tags production


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

1
2
3
4
5
6
7
8
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 [email protected]:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1


它可能会失败,因为1.0.0是一个带注释的标记。可能您看到了以下错误消息:

error: Trying to write non-commit object to branch refs/heads/master

带注释的标记有自己独特的对象类型,这些对象指向带标记的提交对象。分支不能有效地指向标记对象,只能提交对象。您需要"剥离"带注释的标记以提交对象,并将其推送。

1
2
git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand

在本例中还有另一种语法也可以使用,但如果标记对象指向的不是提交(或指向(指向…)提交的标记对象),则意味着略有不同。

1
git push production +1.0.0^{}:master

这些标签剥离语法在Git Rev Parse(1)中的"指定修订"下进行了描述。


推单标签:git push

例如,git push production 1.0.0。标记没有绑定到分支,而是绑定到提交。

当您希望在主分支中包含标记的内容时,请在您的计算机上本地执行该操作。我假设你继续在当地的总分行发展。那么,仅仅一个git push origin master就足够了。