Push git提交&标签同时

我知道为什么git push --tags是一个与普通的git push不同的操作。推标签应该是一个有意识的选择,因为你不想不小心推到一个标签。这很好。但是有没有办法把两者结合起来呢?(除了git push && git push --tags。)

195131 次浏览

2020年8月更新

正如最初在中由SoBeRich自己的答案中提到的,从git 2.4.x开始

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

(注:这实际上是只能在Git 2.24中使用HTTPS)

2015年5月更新

git 2.4.1开始,您可以这样做

git config --global push.followTags true

如果设置为true,默认为enable——follow-tags选项。
您可以在推送时通过指定——no-follow-tags来覆盖此配置

这是Matt Rogers回复Wes Hurd的帖子所述:

# EYZ0 # EYZ1。

git tag -a -m "I'm an annotation" <tagname>

这将被推(与git tag <tagname>相反,一个轻量级标签,它不会被推,因为I 这里提到)

2013年4月更新

git 1.8.3(2013年4月22日)您不再需要执行2个命令来推送分支,然后再推送标签:

新的& --follow-tags"选项告诉& git push"# EYZ2。

你现在可以尝试,当推送新的提交:

git push --follow-tags

不过,这不会推送所有本地标记,只会推送使用git push推送的提交引用的标记。

Git 2.4.1+(2015年第二季度)将引入选项push.followTags:参见"如何使“git push”在分支中包含标签?"。

最初的答案,2010年9月

核心选项是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/*

添加了这些行,git push origin将上传所有的分支和标签。如果您只想上传其中的一些,可以枚举它们。

我自己还没有尝试过,但它看起来可能很有用,直到一些其他的同时推送分支和标签的方式被添加到git push中。
另一方面,我不介意输入:

$ git push && git push --tags

当心,从评论Aseem基肖尔

push = +refs/heads/*力——推动你所有的枝干

它刚才咬了我一下,供你参考。


雷内·麦克尔添加这个有趣的评论:

--follow-tags参数具有误导性,因为只考虑.git/refs/tags下的标签。
如果运行git gc,标记将从.git/refs/tags移动到.git/packed-refs。之后git push --follow-tags ...不再像预期的那样工作

假设你在github上创建了一个新的repo。因此,第一步是克隆repo:git clone {Your Repo 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 GUI

Git GUI有一个PUSH按钮——原谅我的双关语,它打开的对话框有一个标签复选框。

我从命令行推送了一个分支,没有标记,然后尝试使用上面描述的--follow-tags选项再次推送该分支。该选项描述如下带注释的标记。我的标签很简单。

我修复了一些东西,在提交中标记了修复(这样同事们就可以选择修复),然后更改了软件版本号,并标记了我创建的版本(这样同事们就可以克隆那个版本)。

Git返回说一切都是最新的。它没有发送标签!也许是因为标签没有注释。也许是因为树枝上没有什么新东西。

当我用Git GUI做类似的推送时,标签被发送了。

Tags sent with Git GUI

目前,我将使用Git GUI而不是命令行和--follow-tags将更改推送到远程。

@since Git 2.4

# EYZ0

刚刚在git 2.31.0上测试过:git push <refspec> --tags。这样做的好处是它推送ALL标记,而不仅仅是--follow-tags这样的注释标记。

试着everythig。

对我来说,避免在Gitlab上为同一个提交触发两个CI构建的唯一解决方案是:

git push -o ci.skip && git push --tags

# EYZ0。

我在这里重复一个合适的答案,让感兴趣的人更容易看到。 作为我的提醒;)