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

Jon*_*nas 2091 git push repository git-push git-tag

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

git tag mytag master
Run Code Online (Sandbox Code Playgroud)

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

一切都是最新的

如果我去我的桌面并运行git pull然后git tag没有显示标签.

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

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

Tre*_*vor 3448

要推送单个标签:

git push origin <tag_name>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我建议不要使用或训练其他人使用`git push --tags`,因为当你的同事接受培训以推送所有标签时,很难摆脱坏标签,因为人们继续推动旧的坏标签他们每次想要推送新标签时都会在本地使用.因此,我现在只会建议有人使用`git push origin <tag_name>`. (403认同)
  • 推送**移动**标签:`git push origin <tag_name> --force` (38认同)
  • 那么@ScottJungwirth我认为作为开发者应该小心.否则,您可能建议不要教授可用的命令. (38认同)
  • 如果你的标签与远程分支相同而``git push`失败并且`error:src refspec <tag_name>匹配多个.`,你可以将它作为`git push origin tag <tag_name>推送. (17认同)
  • 那么@Willa的问题是"将****标签推送到远程仓库".所以`git push origin <tag_name>`对于那个问题来说是一个更好的答案.;) (5认同)
  • 请注意``git push --tags origin <tag_name>`**不是**你想要的 - 尽管命名了一个特定的标签,它会推动所有标签,甚至是轻量标签.叹. (3认同)
  • 如果要推送所有标签,则可以先`git push --dry-run --tags origin`以查看将要推送的内容。 (2认同)

Cir*_*四事件 952

git push --follow-tags

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

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

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

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

这是理智的,因为:

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

Git 2.4 添加push.followTags默认打开该标志的选项,你可以设置:

git config --global push.followTags true
Run Code Online (Sandbox Code Playgroud)

  • 多亏了这一点,将所有内容一次性推送是有意义的,而不是推送内容然后单独推送标签. (11认同)
  • 这对我在git 2.5.0中不起作用,但是`git push origin --tags`可以。 (7认同)
  • 感谢push.followTags提示.我无法相信这不是开箱即用的默认设置.没有它,甚至懒得标记,你会忘记并失去同步标签. (3认同)

sol*_*gar 257

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


Rai*_*lam 112

在当前分支中添加标签。如果您想为您的 master 创建标签,请首先签出 master。

git tag tag_name
Run Code Online (Sandbox Code Playgroud)

检查是否创建

git tag
Run Code Online (Sandbox Code Playgroud)

推入您的远程源

git push origin tag_name
Run Code Online (Sandbox Code Playgroud)


小智 96

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

推单标签

git push <remote> <tag>
Run Code Online (Sandbox Code Playgroud)

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

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

<refspec>...
Run Code Online (Sandbox Code Playgroud)

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

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

标签的<tag>意思相同refs/tags/<tag>:refs/tags/<tag>.

一次推送所有标签

git push --tags <remote>
# Or
git push <remote> --tags
Run Code Online (Sandbox Code Playgroud)

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

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

--tags
Run Code Online (Sandbox Code Playgroud)

refs/tags除了在命令行中明确列出的refspec之外,所有引用都被推送.


小智 53

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

git push origin <tagname>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


Fer*_*ido 47

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

  • 非常不推荐 (7认同)

Saj*_*han 38

您只需通过git push --tags命令即可推送本地标签.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 
Run Code Online (Sandbox Code Playgroud)


Mic*_*eld 14

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

运行它以推mytag送到您的 git 源(例如:GitHub 或 GitLab)

git push origin refs/tags/mytag
Run Code Online (Sandbox Code Playgroud)

最好使用如上所示的完整“refspec”(字面意思refs/tags/mytag),以防万一mytag实际上v1.0.0是不明确的(例如:因为有一个分支也名为v1.0.0)。


Car*_*l G 10

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

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.
Run Code Online (Sandbox Code Playgroud)


Ali*_*i80 8

将标签推送到远程

git push origin mytag

Run Code Online (Sandbox Code Playgroud)

从远程获取所有标签

git fetch --all --tags
Run Code Online (Sandbox Code Playgroud)