I added a tag to the master branch on my machine:
git tag mytag master
How do I push this to the remote repository? Running git push
gives the message:
Everything up-to-date
However, the remote repository does not contain my tag.
To push a single tag:
git push origin <tag_name>
And the following command should push all tags (not recommended):
# not recommended
git push --tags
git push --follow-tags
This is a sane option introduced in Git 1.8.3:
git push --follow-tags
It pushes both commits and only tags that are both:
annotated
reachable (an ancestor) from the pushed commits
This is sane because:
you should only push annotated tags to the remote, and keep lightweight tags for local development to avoid tag clashes. See also: What is the difference between an annotated and unannotated tag?
it won't push annotated tags on unrelated branches
It is for those reasons that --tags
should be avoided.
Git 2.4 has added the push.followTags
option to turn that flag on by default which you can set with:
git config --global push.followTags true
or by adding followTags = true
to the [push]
section of your ~/.gitconfig
file.
git push origin --tags
does.
To push specific, one tag do following git push origin tag_name
To expand on Trevor's answer, you can push a single tag or all of your tags at once.
Push a Single Tag
git push <remote> <tag>
This is a summary of the relevant documentation that explains this (some command options omitted for brevity):
git push [[
Push All of Your Tags at Once
git push --tags <remote>
# Or
git push <remote> --tags
Here is a summary of the relevant documentation (some command options omitted for brevity):
git push [--all | --mirror | --tags] [
tag
. e.g. git push origin tag funny-tag-1
.
git push origin my-tag
(I just tried it!)
2.10.2
. Maybe that's it?
You can push all local tags by simply git push --tags
command.
$ git tag # see tag lists
$ git push origin <tag-name> # push a single tag
$ git push --tags # push all local tags
Tags are not sent to the remote repository by the git push command. We need to explicitly send these tags to the remote server by using the following command:
git push origin <tagname>
We can push all the tags at once by using the below command:
git push origin --tags
Here are some resources for complete details on git tagging:
http://www.cubearticle.com/articles/more/git/git-tag
http://wptheming.com/2011/04/add-remove-github-tags
You can push the tags like this git push --tags
Add a tag in your current branch
git tag tag_name
Check if it's created or not
git tag
Push in your remote origin
git push origin tag_name
How can I push my tag to the remote repository so that all client computers can see it?
Run this to push mytag
to your git origin (eg: GitHub or GitLab)
git push origin refs/tags/mytag
It's better to use the full "refspec" as shown above (literally refs/tags/mytag
) just in-case mytag
is actually v1.0.0
and is ambiguous (eg: because there's a branch also named v1.0.0
).
I am using git push <remote-name> tag <tag-name>
to ensure that I am pushing a tag. I use it like: git push origin tag v1.0.1
. This pattern is based upon the documentation (man git-push
):
OPTIONS
...
<refspec>...
...
tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.
I did something like this :
git push --tags origin <branch-name> <tag-name>
e.g. : git push --tags origin master v2.0
Success story sharing
git push --tags
as it can be very very difficult to get rid of bad tags when your co-workers are trained to push all tags, as people continue to push the old bad tags they have locally every time they want to push a new tag. Because of this, I will only every advise someone to usegit push origin <tag_name>
now.git push origin <tag_name> --force
git push
fails witherror: src refspec <tag_name> matches more than one.
, you can push it asgit push origin tag <tag_name>
git push --tags origin <tag_name>
IS NOT what you want - despite naming a specific tag, it pushes them all, even lightweight ones. Sigh.git push --dry-run --tags origin
to see what will get pushed.