ChatGPT解决这个技术问题 Extra ChatGPT

How do you push a tag to a remote repository using Git?

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.


7
700 Software

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

I recommend not using or training others to use 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 use git push origin <tag_name> now.
To push a moved tag: git push origin <tag_name> --force
If your tag is the same as remote branch and git push fails with error: src refspec <tag_name> matches more than one., you can push it as git push origin tag <tag_name>
Note that git push --tags origin <tag_name> IS NOT what you want - despite naming a specific tag, it pushes them all, even lightweight ones. Sigh.
If you want to push all tags, you could first git push --dry-run --tags origin to see what will get pushed.
e
einpoklum

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.


It was not clear at once for me that it was an and-relation between "annotated" and "reachable from the pushed commits". I hoped it would push all reachable tags, whatever if annotated or not. Maybe edit to make sure it's not an OR?
This doesn't work for me in git 2.5.0, but git push origin --tags does.
@nnyby please provide a minimal example with all necessary commands from repo creation to failure and post it on a gist so I can try to reproduce ;-)
Thanks for the push.followTags tip. I can't believe this isn't the out-of-the-box default. Without it, don't even bother to tag, you'll forget and get out of sync tags.
Added a line about setting the follow-tags through the config file.
s
solgar

To push specific, one tag do following git push origin tag_name


C
Community

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 [[ […]] ... The format of a parameter is…the source ref , followed by a colon :, followed by the destination ref … The tells which ref on the remote side is updated with this push…If : is omitted, the same ref as will be updated… tag means the same as refs/tags/:refs/tags/.

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] [ […]] --tags All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line.


The example is leaving out the keyword tag. e.g. git push origin tag funny-tag-1.
@JamesThomasMoon1979 You don't need it. You push a single tag to origin like this: git push origin my-tag (I just tried it!)
I was using version 1.9.1, what about you @AndresF. ?
@JamesThomasMoon1979 Version 2.10.2. Maybe that's it?
S
Sajib Khan

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 

A
Ashutosh Meher

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


F
Fernando Diaz Garrido

You can push the tags like this git push --tags


R
Raisul Islam

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

M
Michael Altfield

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).


C
Carl G

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>.

A
Alferd Nobel

I did something like this :

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

e.g. : git push --tags origin master v2.0