如何使用Git将标签推送到远程存储库?


2215

我已经将一个远程Git存储库克隆到了我的笔记本电脑,然后我想添加一个标签,以便我运行

git tag mytag master

当我git tag在笔记本电脑上运行时,mytag会显示标签。然后,我想将其推送到远程存储库,以便在所有客户端上都具有此标记,因此我运行了git push但收到了以下消息:

一切都是最新的

而且,如果我转到桌面并运行git pull,则git tag不会显示任何标签。

我还尝试对项目中的文件进行较小的更改,然后将其推送到服务器。之后,我可以将更改从服务器拉到台式计算机,但是git tag在台式计算机上运行时仍然没有标签。

如何将标签推送到远程存储库,以便所有客户端计算机都可以看到它?

Answers:


1085

git push --follow-tags

这是Git 1.8.3中引入的明智选择:

git push --follow-tags

它既推送提交,又推送两个标签:

  • 带注释
  • 从推送提交中可到达的(祖先)

这是理智的,因为:

出于这些原因,--tags应避免使用。

Git 2.4 添加push.followTags默认打开该标志的选项,您可以使用以下命令进行设置:

git config --global push.followTags true

16
因此,一劳永逸地推送所有内容,而不必先推送内容然后分别推送标签。
Shane 2015年

1
对于我来说,现在还不是很清楚,这是“带注释的”和“可以从推送的提交中获取”之间的和关系。我希望它能推送所有可到达的标签,无论是否带注释。也许进行编辑以确保它不是OR?
Gauthier 2015年

如此,当我这样做时,我回到了bitbucket,除了可以从命令行看到它之外,我还应该在其他地方看到标签列表吗?
PositiveGuy

10
这在git 2.5.0中对我git push origin --tags不起作用,但是可以。
nnyby,2016年

3
感谢您的push.followTags提示。我不敢相信这不是开箱即用的默认设置。没有它,您甚至不必费心标记,您会忘记并失去同步标记。
moodboom

3602

推送单个标签:

git push origin <tag_name>

并且以下命令应推送所有标签(不推荐):

git push --tags

426
我建议您不要使用或培训其他人使用,git push --tags因为当您的同事受过推销所有标签的训练时,要摆脱掉不良标签非常困难,因为人们每次想要在本地推销旧的不良标签时,推送新标签。因此,我将只建议每个人git push origin <tag_name>现在使用。
Scott Jungwirth,2014年

43
推送已移动的标签: git push origin <tag_name> --force
Bob Stein

38
@ScottJungwirth好吧,我认为作为开发人员应该谨慎。否则,您最好不要完全讲授可用的命令。
威拉

18
如果您的标签与远程分支相同,并且git push失败error: src refspec <tag_name> matches more than one.,则可以将其推送为git push origin tag <tag_name>
Volodymyr Sapsai 2015年

5
那么@Willa问题是“推一个标签到远程回购。” 因此git push origin <tag_name>,该问题的答案更好。;)
通配符

265

要推送特定内容,请遵循以下一个标签 git push origin tag_name


99

要扩展Trevor的答案,您可以一次推送一个标签或所有标签。

推送单个标签

git push <remote> <tag>

这是解释此问题的相关文档的摘要(为简洁起见,省略了一些命令选项):

git push [[<repository> [<refspec>…]]

<refspec>...

<refspec>参数的格式为…源ref <src>,后跟冒号:,然后是目标ref <dst>

<dst>该裁判在远程端与此更新推...讲述如果:<dst>省略,同样的裁判作为<src>将被更新...

标签的<tag>含义与相同refs/tags/<tag>:refs/tags/<tag>

一次推送所有标签

git push --tags <remote>
# Or
git push <remote> --tags

以下是相关文档的摘要(为简便起见,省略了一些命令选项):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

refs/tags除了在命令行上明确列出的refspecs外,还将推送下面的所有refs 。


该示例省略了关键字tag。例如git push origin tag funny-tag-1
JamesThomasMoon1979

1
@ JamesThomasMoon1979您不需要它。您将单个标签按如下方式推入原点:(git push origin my-tag我刚刚尝试过!)
Andres F.

我正在使用1.9.1版本,@AndresF呢??
JamesThomasMoon1979年

1
@ JamesThomasMoon1979版本2.10.2。也许就是这样吗?
Andres F.


50

您可以通过简单的git push --tags命令推送所有本地标签。

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

我正在使用git push <remote-name> tag <tag-name>以确保我正在推送标签。我使用它像:git push origin tag v1.0.1。此模式基于文档(man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
优秀,应该放在最前面-因为它可以确保err推送的标签不是分支。
samshers,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.