How Do You Push a Tag to a Remote Repository Using Git?
I Have Cloned a Remote Git Repository to My Laptop, Then I Wanted to Add a Tag So I Ran Git Tag Mytag Master When I Run Git Tag on My Laptop the Tag Mytag Is...
I have cloned a remote Git repository to my laptop, then I wanted to add a tag so I ran
git tag mytag master
When I run git tag on my laptop the tag mytag is shown. I then want to push this to the remote repository so I have this tag on all my clients, so I run git push but I got the message:
Everything up-to-date
And if I go to my desktop and run git pull and then git tag no tags are shown.
I have also tried to do a minor change on a file in the project, then push it to the server. After that I could pull the change from the server to my Desktop computer, but there's still no tag when running git tag on my desktop computer.
How can I push my tag to the remote repository so that all client computers can see it?
11 Answers
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.
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.
Must Read
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 [[<repository> [<refspec>…]] <refspec>...The format of a
<refspec>parameter is…the source ref<src>, followed by a colon:, followed by the destination ref<dst>…The
<dst>tells which ref on the remote side is updated with this push…If:<dst>is omitted, the same ref as<src>will be updated…tag
<tag>means the same asrefs/tags/<tag>:refs/tags/<tag>.