How do you push a tag to a remote repository using Git?
GitGit PushGit TagGit Problem Overview
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?
Git Solutions
Solution 1 - Git
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
Solution 2 - Git
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: https://stackoverflow.com/questions/11514075
- 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.
Solution 3 - Git
To push specific, one tag do following
git push origin tag_name
Solution 4 - Git
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 [[<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 as refs/tags/<tag>:refs/tags/<tag>
.
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] [refs/tags
are pushed, in addition to refspecs explicitly
> listed on the command line.
Solution 5 - Git
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
Solution 6 - Git
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:
Solution 7 - Git
You can push the tags like this git push --tags
Solution 8 - Git
> 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
).
Solution 9 - Git
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>.
Solution 10 - Git
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
Solution 11 - Git
I did something like this :
git push --tags origin <branch-name> <tag-name>
e.g. : git push --tags origin master v2.0