What is git tag, How to create tags & How to checkout git remote tag(s)
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Git is an incredibly powerful tool for managing projects, and one of its lesser-known but invaluable features is the ability to tag specific points in history. Tags in Git are similar to markers or milestones, allowing developers to mark particular commits as important, typically for releases or stable points in development. Understanding what Git tags are, how to create them, and manage them, particularly in remote repositories, can greatly enhance version control practices.
What is a Git Tag?
A Git tag is essentially a reference to a specific commit, capturing the repository at a certain state. Unlike branches, which are updated regularly, tags are fixed, making them ideal for marking release points like v1.0, v2.0, etc. Git supports two types of tags:
- Annotated Tags: These are stored as full objects in the Git database, allowing for storing extra metadata such as the tagger name, email, and date. Additionally, they can be signed and verified with GNU Privacy Guard (GPG). Annotated tags are recommended because they provide all of this additional context, which is valuable for a release.
- Lightweight Tags: These are essentially a simple reference to a commit — they are a name and a pointer to a commit — and contain no additional information.
How to Create Tags
Creating an Annotated Tag:
You can create an annotated tag with the following command:
Here, -a v1.0.0 specifies the tag name, and -m follows with a message describing the tag.
Creating a Lightweight Tag:
To create a lightweight tag, you can simply run:
This command does not include the -a, -s, or -m options.
How to Checkout Git Remote Tags
Tags are not automatically fetched along with the repository. To work with remote tags, you typically need to fetch them explicitly and then check them out. Here's how you can do it:
Fetching Tags from a Remote Repository:
This command downloads tags from the remote repository along with the commits they refer to.
Checking Out Tags:
After fetching, tags can be checked out similarly to branches:
For example:
This puts the repository into a 'detached HEAD' state, where no branches are checked out. To start working from a tag as a base, it would be wise to create a new branch:
Summary Table
| Feature | Annotated Tag | Lightweight Tag |
| Description | Stores full objects with metadata and can be signed | Simple pointer to a specific commit |
| Creation Command | git tag -a <tag_name> -m "<message>" | git tag <tag_name> |
| Recommended Use | Releases and important milestones | Quick, temporary references |
Additional Tips and Considerations
- Tag Naming Conventions: Follow a consistent naming convention for tags, especially in teams. Common practices include using semantic versioning (
v1.0.1,v2.0.0-beta, etc.). - Deleting Tags: To delete a tag locally, use
git tag -d <tag_name>. To delete a remote tag, first delete the tag locally, then push the deletion usinggit push origin --delete <tag_name>. - Listing Tags: To list all existing tags in a repository, use
git tagorgit tag -l "v1.*"to filter for specific patterns.
Understanding and using Git tags effectively can streamline your development process significantly, especially when it comes to managing releases and tracking historical points in your project's development lifecycle.

