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

Mic*_*jen 216 git git-push git-tag

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

我现在正在做以下事情:

git push production +1.0.0:master
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

更新#1

当我通过SSH连接到我的Git存储库并执行的服务器时git branch -l,我也看不到master列出的分支.

更新#2

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

git push production 1.0.0:master
Run Code Online (Sandbox Code Playgroud)

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

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

bst*_*rre 469

git push --tags production
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是如何解决原始海报通过强制推送覆盖带有标签的分支的问题?这只是将您的所有标签推送到遥控器,它不会覆盖任何分支. (5认同)
  • 如果遥控器上已存在标签,则需要先使用`git push production:1.0.0`删除远程标签. (4认同)

neo*_*eye 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
Run Code Online (Sandbox Code Playgroud)

  • 它会推送你的所有标签 (4认同)
  • 请注意,这实际上并不能解决原始海报关于使用标签覆盖分支的问题,它只会将您的标签推送到远程,而不会影响分支. (2认同)

Chr*_*sen 58

它可能是失败的,因为它是1.0.0一个带注释的标签.也许您看到以下错误消息:

错误:尝试将非提交对象写入分支refs/heads/master

带注释的标签有自己独特的对象类型,指向标记的提交对象.分支无法有效地指向标记对象,只能提交对象.您需要将带注释的标签"剥离"回提交对象并推送它.

git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand
Run Code Online (Sandbox Code Playgroud)

还有另一种语法在这种情况下也可以工作,但如果标记对象指向除提交之外的东西(或指向(指向...的标记对象)提交的标记对象,则意味着略有不同) .

git push production +1.0.0^{}:master
Run Code Online (Sandbox Code Playgroud)

这些标记剥离语法在指定修订版下的git-rev-parse(1)中描述.

  • @brad:`〜{commit}`语法是文字的(即总是那九个字符); "commit"这个词不是占位符. (4认同)
  • @Michael:啊.是的,如果*master*不存在(作为分支或标记),那么`git push rep + tag:master`将创建一个名为*master*而不是分支的标记.`git push rep + tag~0:master`(再次,当*master*不存在作为分支或标记时)将失败并显示"error:无法推送到不合格的目的地".可以完成你想要的命令(在任何*master*分支/标签存在之前)是`git push rep + tag~0:refs/heads/master`(`refs/heads /`是分支机构所在的命名空间存储). (2认同)

kop*_*por 10

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

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

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

  • 请注意,这实际上并不能解决原始海报关于使用标签覆盖分支的问题,它只会将您的标签推送到远程,而不会影响分支. (5认同)