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

时间:2010-10-31 01:39:36

标签: git git-push git-tag

我想强制推送,例如,我的代码1.0.0到我的远程master分支。

我现在正在做以下事情:

git push production +1.0.0:master

我想强制推送 ,因为我关心的是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 内容 推送到远程Git存储库的master分支。

4 个答案:

答案 0 :(得分:469)

git push --tags production

答案 1 :(得分: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

答案 2 :(得分:56)

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

答案 3 :(得分:9)

推送单个代码:git push <reponame> <tagname>

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

如果要在主分支中包含标记的内容,请在计算机上本地执行此操作。我假设你继续在你当地的主分公司开发。然后只需git push origin master即可。