Posted By: Anonymous
I’m aware of the reason that
git push --tags is a separate operation to plain old
git push. Pushing tags should be a conscious choice since you don’t want accidentally push one. That’s fine. But is there a way to push both together? (Aside from
git push && git push --tags.)
Update August 2020
git push --atomic origin <branch name> <tag>
(Note: this actually work with HTTPS only with Git 2.24)
Update May 2015
As of git 2.4.1, you can do
git config --global push.followTags true
If set to true enable –follow-tags option by default.
You may override this configuration at time of push by specifying –no-follow-tags.
As noted in this thread by Matt Rogers answering Wes Hurd:
--follow-tags only pushes annotated tags.
git tag -a -m "I'm an annotation" <tagname>
That would be pushed (as opposed to
git tag <tagname>, a lightweight tag, which would not be pushed, as I mentioned here)
Update April 2013
Since git 1.8.3 (April 22d, 2013), you no longer have to do 2 commands to push branches, and then to push tags:
The new "
--follow-tags" option tells "
git push" to push relevant annotated tags when pushing branches out.
You can now try, when pushing new commits:
git push --follow-tags
That won’t push all the local tags though, only the one referenced by commits which are pushed with the
Git 2.4.1+ (Q2 2015) will introduce the option
push.followTags: see "How to make “
git push” include tags within a branch?".
Original answer, September 2010
The nuclear option would be
git push --mirror, which will push all refs under
You can also push just one tag with your current branch commit:
git push origin : v1.0.0
You can combine the
--tags option with a refspec like:
git push origin --tags :
--tags means: All refs under
refs/tags are pushed, in addition to refspecs explicitly listed on the command line)
You also have this entry "Pushing branches and tags with a single "git push" invocation"
A handy tip was just posted to the Git mailing list by Zoltán Füzesi:
.git/configto solve this:
[remote "origin"] url = ... fetch = +refs/heads/*:refs/remotes/origin/* push = +refs/heads/* push = +refs/tags/*
With these lines added
git push originwill 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
push = +refs/heads/* will force-pushes all your branches.
This bit me just now, so FYI.
--follow-tagsparameter is misleading as only tags under
git gcis run, tags are moved from
git push --follow-tags ...does not work as expected anymore.