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


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

git tag mytag master

当我跑 git tag 在我的笔记本上标签 mytag 显示。然后我想将它推送到远程存储库,所以我在所有客户端上都有这个标签,所以我跑了 git push 但我收到了消息:

一切都是最新的

如果我去我的桌面并运行 git pull 接着 git tag 没有标签显示。

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

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


1548
2018-03-04 15:37


起源




答案:


推动一个  标签:

git push origin <tag_name>

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

git push --tags

2470
2018-03-04 15:40



我建议不要使用或训练他人使用 git push --tags 因为当你的同事接受培训以推送所有标签时,很难摆脱坏标签,因为人们每次想要推送新标签时都会继续推送旧的坏标签。因此,我只会建议有人使用 git push origin <tag_name> 现在。 - Scott Jungwirth
推动一个 移动 标签: git push origin <tag_name> --force - Bob Stein
那么@ScottJungwirth我认为作为开发者应该小心。否则,你可能会建议不要教授可用的命令。 - Willa
如果您的标签与远程分支相同 git push 失败了 error: src refspec <tag_name> matches more than one.,你可以推动它 git push origin tag <tag_name> - Volodymyr Sapsai
那么@Willa的问题是“推 一个 标记到远程仓库。“所以 git push origin <tag_name> 这个问题是一个更好的答案。 ;) - Wildcard


git push --follow-tags

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

git push --follow-tags

它推送两个提交,只推送两个标签:

  • 注释
  • 来自推送提交的可达(祖先)

这是理智的,因为:

  • 您应该只将带注释的标签推送到远程,并保留轻量级标签以进行本地开发,以避免标签冲突。也可以看看: 带注释和未注释的标签有什么区别?
  • 它不会在不相关的分支上推送带注释的标签

出于这些原因 --tags 应该避免。

Git 2.4 补充道 该 push.followTags 默认情况下打开该标志的选项,您可以设置:

git config --global push.followTags true

700
2017-10-18 09:12



多亏了这一点,将所有内容一次性推送是有意义的,而不是推送内容然后单独推送标签。 - Shane
我立刻不清楚它是“注释”和“可以从推动的提交中获得”之间的关系。我希望它会推送所有可访问的标签,无论注释与否。也许编辑以确保它不是OR? - Gauthier
@Gauthier谢谢,加上两个消除歧义 - Ciro Santilli 新疆改造中心 六四事件 法轮功
soo,就像我这样做,我回到bitbucket,除了能够从命令行看到它之外,我是否应该看到某个标签列表? - PositiveGuy
感谢push.followTags提示。我无法相信这不是开箱即用的默认设置。没有它,甚至懒得标记,你会忘记并失去同步标签。 - moodboom


要推送特定的,一个标签执行以下操作 git push origin tag_name


228
2017-10-24 14:43





要扩展 特雷弗的回答,您可以推送单个标签或全部 标签一次。

推单标签

git push <remote> <tag>

这是一个总结 相关文件 这解释了这个(一些 为简洁省略了命令选项):

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

<refspec>...

a的格式 <refspec> 参数是......源ref <src>,   然后是冒号 :,然后是目的地参考 <dst>...

<dst> 告诉远程端哪个ref用这个更新   推...如果 :<dst> 省略,与ref相同 <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之外,还会被推送   在命令行中列出。


74
2018-04-22 10:52



示例是省略关键字 tag。例如 git push origin tag funny-tag-1。 - JamesThomasMoon1979
@JamesThomasMoon1979你不需要它。您将单个标记推送到原点,如下所示: git push origin my-tag (我刚刚尝试过!) - Andres F.
我正在使用版本 1.9.1,你怎么样@AndresF。 ? - JamesThomasMoon1979
@ JamesThomasMoon1979版 2.10.2。也许就是这样? - Andres F.


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


41
2018-03-04 15:40





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

git push origin <tagname>

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

git push origin --tags

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

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

http://wptheming.com/2011/04/add-remove-github-tags


39
2018-01-10 05:57





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

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

13
2017-11-25 08: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>.

2
2018-04-18 18:24





如果您只是寻找命令,请不要使用它,因为此解决方案的主要目的是为您介绍一种解决方案!

为了让生活更轻松 - 我写了一个剧本 GIT中作弊表 ,它包含一些有用的命令,包括以下内容:

./git_commands.sh -push_tag TAG_NAME


0
2018-06-19 16:07