如何使用git将标记推送到远程存储库?

How do you push a tag to a remote repository using Git?

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

1
git tag mytag master

当我在笔记本电脑上运行git tag时,会显示标签mytag。然后我想把它推到远程存储库,这样我的所有客户机上都有这个标签,所以我运行git push,但我得到了一条消息:

Everything up-to-date

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

我还尝试对项目中的一个文件做一个小的更改,然后将其推送到服务器上。之后,我可以将更改从服务器拉到我的桌面计算机上,但在我的桌面计算机上运行git tag时仍然没有标记。

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


按下单个标签:

1
git push origin <tag_name>

下面的命令应该推送所有标签(不推荐):

1
git push --tags


git push --follow-tags

这是Git 1.8.3中引入的健全选项:

1
git push --follow-tags

它会同时推送提交和只推送两个标签:

  • 注释的
  • 从推送的提交中可访问(祖先)

这是正常的,因为:

  • 您应该只将带注释的标记推送到远程,并为本地开发保留轻量级标记,以避免标记冲突。另请参见:注释标记和未注释标记之间的区别是什么?
  • 它不会在不相关的分支上推送带注释的标签

正是由于这些原因,应避免使用--tags

Git2.4添加了push.followTags选项,默认情况下打开该标志,您可以使用以下选项进行设置:

1
git config --global push.followTags true


要强制指定,请执行以下一个标记git push origin tag_name


要扩展Trevor的答案,您可以按一个标签或全部立即标记。

推一个标签

1
git push <remote> <tag>

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

1
2
3
git push [[<repository> [<refspec>…]]

<refspec>...

The format of a parameter is…the source ref ,
followed by a colon :, followed by the destination ref

The tells which ref on the remote side is updated with this
push…If : is omitted, the same ref as will be
updated…

tag means the same as refs/tags/:refs/tags/.

把你所有的标签都推一推

1
2
3
git push --tags <remote>
# Or
git push <remote> --tags

以下是相关文档的摘要(一些命令选项为简洁而省略):

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

--tags

All refs under refs/tags are pushed, in addition to refspecs explicitly
listed on the command line.


标签不会通过git push命令发送到远程存储库。我们需要使用以下命令显式地将这些标记发送到远程服务器:

1
git push origin <tagname>

我们可以使用以下命令一次推送所有标签:

1
git push origin --tags

以下是有关git标记的完整详细信息的一些资源:

http://www.cubearticle.com/articles/more/git/git-tag

Adding and Removing Tags on GitHub


你可以像这样推标签git push --tags


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

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

我使用git push tag 来确保我在推标签。我的用法是:git push origin tag v1.0.1。此模式基于文档(man git-push):

1
2
3
4
5
OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.