Skip to main content

Command Palette

Search for a command to run...

๐Ÿท๏ธ Git Tags

Updated
โ€ข4 min read
๐Ÿท๏ธ Git Tags

Here is a simplified, blog-style version of your notes, optimized for a platform like Hashnode.


The "Bookmarks" of Your Code History

Have you ever finished a big project, saved the file as Final_Project_v1.doc, and then later realized you needed Final_Project_v2_FINAL.doc?

In software development, we use Git Tags to handle this elegantly.

๐Ÿค” What is a Git Tag?

A Git Tag is simply a permanent label or marker attached to a specific point in your project's history (a specific commit).

Think of your code history as a book.

  • Commits are the pages.

  • Branches are bookmarks that move forward as you keep reading (writing code).

  • Tags are permanent sticky notes you place on important pages (like "Chapter 1 Complete") that never move.

Why do we need them?

Unlike branches, tags are immutable. Once you stick a tag on a commit, it stays there. This is perfect for:

  • Releases: Marking "Version 1.0" so you can find it later.

  • Rollbacks: If v2.0 crashes, you can instantly jump back to the code exactly as it was in v1.0.

  • CI/CD: Telling your automated servers, "I just created a tag, please deploy this to the website!"


โœŒ๏ธ The Two Types of Tags

Git gives you two ways to make a tag.

1. Lightweight Tags (The "Post-it Note")

This is just a pointer to a specific commit. It has no extra data.

  • Best for: Quick, personal markers or temporary reference points.

  • Command: git tag v1.0

2. Annotated Tags (The "Official Stamp")

This is the professional way to tag. It stores a full history, including who made the tag, when, and a message describing it.

  • Best for: Public releases (v1.0, v2.1).

  • Command: git tag -a v1.0 -m "My Release Message"

Pro Tip: Always use Annotated Tags for official software releases.


๐Ÿ› ๏ธ The Essential Cheat Sheet

Here are the commands you will use 99% of the time.

Creating Tags

Bash

# Create a simple tag
git tag v1.0

# Create an annotated tag (Recommended)
git tag -a v1.0 -m "Official Release version 1.0"

# Tag a specific commit from the past (Time travel!)
# First, find the commit ID using 'git log', then:
git tag -a v0.9 <commit-hash> -m "Forgot to tag this earlier"

Viewing Tags

Bash

# List all tags
git tag

# Search for specific versions (e.g., all v1 versions)
git tag -l "v1.*"

# See details of a specific tag
git show v1.0

Sharing and Deleting

Important: When you run git push, tags are NOT sent to GitHub automatically. You must push them explicitly.

Bash

# Push all tags to GitHub/Remote
git push origin --tags

# Push a single tag
git push origin v1.0

# Delete a tag locally
git tag -d v1.0

# Delete a tag on GitHub/Remote
git push origin --delete v1.0

๐Ÿš€ Hands-On: A Quick Walkthrough

Let's simulate a real software release cycle. Open your terminal and try this:

Step 1: Start a Project

Bash

git init tag-demo
cd tag-demo
echo "App Version 1.0" > app.txt
git add . && git commit -m "Finished Version 1"

Step 2: Release Version 1.0

Bash

git tag -a v1.0 -m "First Official Release"

Step 3: Make Changes (Version 1.1)

Bash

echo "New Feature Added" >> app.txt
git commit -am "Added cool feature"

Step 4: Release Version 1.1

Bash

git tag -a v1.1 -m "Release with new features"

Step 5: Send to Cloud

Bash

# (Assuming you have a remote repo linked)
git push origin --tags

๐Ÿง  Best Practices for Teams

1. Naming Matters (Semantic Versioning)

Don't name tags random things like final-release or updated-code. Use Semantic Versioning:

  • Format: vMajor.Minor.Patch

  • Example: v2.1.4

    • 2 = Breaking change (New design, old code won't work).

    • 1 = New feature (Added something new, compatible with old).

    • 4 = Bug fix (Fixed a typo or error).

2. CI/CD Integration

Modern DevOps relies on tags. You can configure GitHub Actions or Jenkins to say:

"Whenever a tag starting with 'v' is pushed, automatically build the Docker container and deploy it to the production server."

3. Don't Retag!

Never delete a tag and move it to a different commit on a public repository. It confuses everyone's history and breaks automated build tools. If you made a mistake, create a new tag (e.g., v1.0.1).


๐Ÿ Summary

  • Tags are permanent bookmarks for releases.

  • Annotated tags (-a) are best because they store author and date info.

  • Push tags explicitly using git push origin --tags.

  • Use SemVer (v1.0.0) to keep things organized.

Happy Tagging! ๐Ÿท๏ธ