我想强制推送,例如,我的代码1.0.0
到我的远程master
分支。
我现在正在做以下事情:
git push production +1.0.0:master
我想强制推送 ,因为我关心的是1.0.0
标记内的代码被推送到master
远程存储库上的分支。
我做错了什么?
当我通过SSH连接到我的Git存储库所在的服务器并执行git branch -l
时,我看不到列出的master
分支。
从远程Git存储库中运行git tag -l
后,我看到列出了master
,这意味着当我运行以下内容时:
git push production 1.0.0:master
它实际上推了标记, 创建了一个名为 master
的标记,而不是 一个新的分支
我希望基本上将标记1.0.0
的 内容 推送到远程Git存储库的master
分支。
答案 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
即可。