git push --tags
是一个独立的操作,与 git push
不同,因为推送标签应该是一个有意识的选择,以避免意外推送错误的标签。这很好。但是我如何同时 / 原子地推送它们?(git push && git push --tags
不是完全原子的。)
git push --tags
是一个独立的操作,与 git push
不同,因为推送标签应该是一个有意识的选择,以避免意外推送错误的标签。这很好。但是我如何同时 / 原子地推送它们?(git push && git push --tags
不是完全原子的。)
正如this答案中SoBeRich所提到的,以及我自己的回答中提到的,从git 2.4.x开始
git push --atomic origin <branch name> <tag>
注意:这实际上只适用于Git 2.24及以上的HTTPS。
截至Git 2.4.1,您可以执行以下操作:
git config --global push.followTags true
如果设置为true,则默认启用--follow-tags选项。
您可以在推送时通过指定--no-follow-tags来覆盖此配置。
正如Matt Rogers在回答Wes Hurd的这个帖子中所指出的那样:
--follow-tags
仅推送带注释的标签。
git tag -a -m "I'm an annotation" <tagname>
这将被推送(与轻量级标签git tag <tagname>
相反,后者不会被推送,就像我在这里提到的)
自git 1.8.3(2013年4月22日)以来,您现在不再需要执行两个命令来推送分支和标签:
新的"
--follow-tags
"选项告诉"git push
"在推送分支时一起推送相关的注释标签。
当推送新提交时,您现在可以尝试:
git push --follow-tags
git push
推送的提交所引用的标签。
Git 2.4.1+ (Q2 2015) 将引入选项 push.followTags
:请参见 "如何使“git push
”包括分支内的标签?"。
核心选项是 git push --mirror
,它将推送 refs/
下的所有引用。
您也可以推送当前分支提交的一个标签:
git push origin : v1.0.0
--tags
选项与refspec组合使用,例如:git push origin --tags :
--tags
的意思是:所有在 refs/tags
下的引用都被推送,除了在命令行上明确列出的 refspecs)
您还有这个条目 "使用单个"git push"命令推送分支和标签"
Zoltán Füzesi在Git邮件列表上发布了一个方便的提示:
我使用
.git/config
来解决这个问题:
[remote "origin"]
url = ...
fetch = +refs/heads/*:refs/remotes/origin/*
push = +refs/heads/*
push = +refs/tags/*
With these lines added
git push origin
will upload all your branches and tags. If you want to upload only some of them, you can enumerate them.Haven't tried it myself yet, but it looks like it might be useful until some other way of pushing branches and tags at the same time is added to git push.
On the other hand, I don't mind typing:$ git push && git push --tags
注意,正如Aseem Kishore所评论的那样
push = +refs/heads/*
将强制推送你的所有分支
这个问题刚刚影响了我,所以提前告知一下。
--follow-tags
参数是误导性的,因为只考虑.git/refs/tags
下的标签。
如果运行git gc
,则标签会从.git/refs/tags
移动到.git/packed-refs
。之后git push --follow-tags ...
不再按预期工作。
push = +refs/heads/*
这行代码将强制推送您的所有分支。这刚刚对我造成了影响,所以提供给您参考。 - Aseem Kishore--follow-tags
标志,我能否配置我的git安装使其成为默认值? - Trevor Burnhamgit push --follow-tags -f
对我没用。 - mauryat.git/refs/tags
下的标签。如果运行 git gc
命令,则会将标签从 .git/refs/tags
移动到 .git/packed-refs
中。之后,“git push --follow-tags…” 将不再按预期工作。 - René Scheibegit push --atomic origin <branch name> <tag>
git push; git push --tags
。 - Blaine Lafreniere假设你已在GitHub上创建了一个新的仓库。第一步应该是克隆仓库:git clone {您的仓库URL}
完成您的工作后,添加一些文件、代码等,然后使用以下命令推送您的更改:
git add .
git commit -m "first commit"
git push
现在我们的更改已经合并到主分支。让我们创建一个标签:
git tag v1.0.0 # creates tag locally
git push origin v1.0.0 # pushes tag to remote
如果您想删除标签:
git tag --delete v1.0.0 # deletes tag locally
git push --delete origin v1.0.0 # deletes remote tag
git status
,你会看到类似于“你的分支领先于 'origin/develop' 1 次提交。(使用 "git push" 发布你的本地提交)”这样的提示。 - Wladgit push origin 0.1.0
- 你应该省略单词“tag”。然后它就非常好用了。对我来说,甚至比--follow-tags选项更好。 - Wlad在git 2.31.0上进行了测试:git push <refspec> --tags
。这样做的好处是它会推送所有标签,而不仅仅是像--follow-tags
一样的注释标签。
Git GUI有一个PUSH按钮 - 请原谅双关语,它打开的对话框中有一个标签复选框。
我在命令行上推送了一个分支,没有标签,然后尝试使用上面描述的--follow-tags
选项再次推送该分支。该选项被描述为跟随注释标签。我的标签是简单标签。
我修复了一些东西,用修复的提交打了标签(这样同事就可以挑选修复),然后更改了软件版本号并打了我创建的发布标签(这样同事就可以克隆该发布)。
Git返回说一切都是最新的。它没有发送标签!也许是因为标签没有被注释。也许是因为分支上没有新内容。
当我使用Git GUI进行类似的推送时,标签被发送了。
目前,我将使用Git GUI而不是命令行和--follow-tags
来推送我的更改到我的远程。
git push && git push --tags
有什么问题? - fuz--follow-tags
选项。 - VonC