217

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

我现在正在执行以下操作:

git push production +1.0.0:master

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

我究竟做错了什么?

更新#1

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

更新#2

从远程 Git 存储库内部运行后git tag -l,我看到它master已列出,这意味着当我运行以下命令时:

git push production 1.0.0:master

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

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

4

4 回答 4

469
git push --tags production
于 2010-10-31T02:03:40.313 回答
64

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

于 2010-10-31T02:08:50.853 回答
61

我像这样创建标签,然后将其推送到 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
于 2011-11-09T14:17:57.577 回答
10

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

例如,git push production 1.0.0. 标签不绑定到分支,它们绑定到提交。

当您想在 master 分支中拥有标签的内容时,请在您的机器上本地执行此操作。我假设您继续在本地主分支中进行开发。那么一个git push origin master就足够了。

于 2013-06-03T07:06:09.890 回答