ChatGPT解决这个技术问题 Extra ChatGPT

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

我在机器上的 master 分支上添加了一个标签:

git tag mytag master

如何将其推送到远程存储库?运行 git push 给出消息:

一切都是最新的

但是,远程存储库不包含我的标签。


7
700 Software

推送单个标签:

git push origin <tag_name>

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

# not recommended
git push --tags

我建议不要使用或培训其他人使用 git push --tags,因为当您的同事接受过推送所有标签的培训时,很难摆脱坏标签,因为人们继续推送他们在本地拥有的旧的坏标签。他们想要推送新标签的时间。因此,我只会建议每个人现在使用 git push origin <tag_name>
要推送 moved 标记:git push origin <tag_name> --force
如果您的标签与远程分支相同且 git push 失败并显示 error: src refspec <tag_name> matches more than one.,您可以将其推送为 git push origin tag <tag_name>
请注意,git push --tags origin <tag_name> 不是 您想要的 - 尽管命名了特定标签,但它会将它们全部推送,甚至是轻量级标签。叹。
如果您想推送所有标签,您可以先 git push --dry-run --tags origin 查看将推送的内容。
e
einpoklum

git push --follow-tags

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

git push --follow-tags

它推送两个提交,并且只推送两者的标签:

带注释的

从推送的提交中可达(祖先)

这是理智的,因为:

您应该只将带注释的标签推送到远程,并保留轻量级标签以供本地开发以避免标签冲突。另请参阅:带注释的标签和未注释的标签有什么区别?

它不会在不相关的分支上推送带注释的标签

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

Git 2.4 has added push.followTags 选项默认打开该标志,您可以设置:

git config --global push.followTags true

或通过将 followTags = true 添加到 ~/.gitconfig 文件的 [push] 部分。


我并不清楚这是“注释”和“可从推送的提交中访问”之间的与关系。我希望它会推送所有可访问的标签,无论是否有注释。也许编辑以确保它不是 OR?
这在 git 2.5.0 中对我不起作用,但 git push origin --tags 可以。
@nnyby 请提供一个最小的示例,其中包含从 repo 创建到失败的所有必要命令,并将其发布在 gist 上,以便我可以尝试重现 ;-)
感谢 push.followTags 提示。我不敢相信这不是开箱即用的默认设置。没有它,甚至不用费心标记,你会忘记并失去同步标记。
添加了关于通过配置文件设置跟随标签的行。
s
solgar

要推送具体,一个标签执行以下 git push origin tag_name


C
Community

要扩展 Trevor's answer,您可以一次推送单个标签或所有标签。

推送单个标签

git push <remote> <tag>

这是解释这一点的 relevant documentation 的摘要(为简洁起见,省略了一些命令选项):

git push [[ [...]] ... 参数的格式是...源 ref ,后跟冒号 :,后跟目标 ref ... 告诉远程端的哪个 ref 通过此推送更新...如果省略 :,则将更新与 相同的 ref ... tag 表示与 refs/tags/ 相同:refs/tags/

一次推送所有标签

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

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

git push [--全部 | --镜子 | --tags] [ […]] --tags 除了在命令行中明确列出的 refspecs 之外,refs/tags 下的所有 refs 都会被推送。


该示例省略了关键字 tag。例如git push origin tag funny-tag-1
@JamesThomasMoon1979 你不需要它。您将单个标签推送到原点,如下所示:git push origin my-tag(我刚刚尝试过!)
我使用的是 1.9.1 版,你呢@AndresF。 ?
@JamesThomasMoon1979 版本 2.10.2。也许就是这样?
S
Sajib Khan

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

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

A
Ashutosh Meher

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


F
Fernando Diaz Garrido

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


R
Raisul Islam

在当前分支中添加标签

git tag tag_name

检查它是否已创建

git tag

推入您的远程来源

git push origin tag_name

M
Michael Altfield

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

运行此命令将 mytag 推送到您的 git 源(例如:GitHub 或 GitLab)

git push origin refs/tags/mytag

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


C
Carl G

我正在使用 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>.

A
Alferd Nobel

我做了这样的事情:

git push --tags origin <branch-name> <tag-name>

e.g. : git push --tags origin master v2.0