In the previous post introducing Git tags, we learnt what Git tags are, how they are created and how we can view the existing tags. By default, when we run
git push, Git does not push the tags you have created to the remote server (eg: Github). We need to be explicit in our intention when we want to push the tags to the remote server.
This post will be a continuation of the previous post, discussing on the following points:
- How to push tags to a remote server
- How to delete tags (locally and in the remote server)
- Create branches based off a tag
As already mentioned, merely running
git push won't push the tags. In order to push tags to the remote server, we need to use the
--tags flag. Hence the command would be:
git push --tags # In case you want to push to a different origin git push <remote> --tags
There is no way to push just the lightweight tags.
The command to delete a tag in your local Git repository is:
git tag -d <tagname>
If the tag has been pushed to the remote server before deleting it in the local Git repository, you need to run another explicit command to delete the tag from the remote server too. The command is:
git push <remote> --delete <tagname> # Example git push origin --delete v1.0.1
There is another way to delete a tag in the remote server. The command is:
git push <remote> :refs/tags/<tagname>
The explanation of this command is: Push the part before the colon (
:) to the remote tag named
<tagname>. In this case, the part before the colon (
:) is null.
The general command to create a branch is:
git checkout -b <newBranch> <reference>
reference can be any valid Git object. Using this command, a new branch based off a tag can be created using:
git checkout -b <newBranch> <tagname>
If you are looking to just explore the code that is versioned by the tag, you can also directly checkout the tag using:
git checkout <tagname>. Using this command puts your repository in detached HEAD state. You can use the link provided to learn more about it. I will also be exploring it in a future post of mine.
TL;DR of detached HEAD: In "detached HEAD", if you make some changes and commit them, the changes will not belong to any branch and will be lost. The only way to reach the commit would be by using its commit hash.
My hope is that by now, you are well equipped with dealing with the basics of Git tags, and are ready to tackle any new concepts that are thrown your way. Again, I also recommend reading my first post on Git tags.