Can you delete a tag you've already pushed?

Tags aren't for deleting. They're for stacking up
Tags aren't for deleting. They're for stacking up

You push v1.0.0, take a breath, and a minute later spot a bug in the init code. Your reflex is "delete the tag, fix the bug, push v1.0.0 again." Technically you can: git tag -d v1.0.0 locally, git push origin --delete v1.0.0 on the remote. The commands work. But on a real team this is almost always the wrong move.

The reason is simple: v1.0.0 has already left your laptop. A teammate may have run git fetch and grabbed it. CI/CD pipelines may have built or deployed from it. If you delete and re-push a different v1.0.0, two incompatible "v1.0.0"s now exist in the wild, and "please look at the bug in v1.0.0" stops being a precise instruction. A release tag is a snapshot at a point in time: once it changes, the release log stops being a reliable reference.

The right move is to leave v1.0.0 alone and ship the next version. For a post-release bug fix, bump the PATCH digit of semantic versioning and tag v1.0.1. The history now reads v1.0.0 → v1.0.1 (hotfix), and anyone looking back can see exactly when the bug was fixed. The PATCH slot exists for this very reason. Tags aren't meant to be deleted; they're meant to stack up.