Cheatsheet: Releases and tags
Voice anchor
Section titled “Voice anchor”Git stores snapshots. Every other command is just navigating those snapshots.
A tag is an immutable label on a specific snapshot.
Command reference
Section titled “Command reference”# Creategit tag -a vX.Y.Z -m "Release vX.Y.Z: description" # current commitgit tag -a vX.Y.Z <commit-sha> -m "description" # specific commit
# Inspectgit tag # list all tagsgit tag --sort=-v:refname # version-aware sort, descendinggit tag --list 'v1.*' # filter by patterngit show vX.Y.Z # full details
# Pushgit push origin vX.Y.Z # one taggit push origin --tags # all local tags
# Pullgit fetch --tags # download tags from remote
# Deletegit tag -d vX.Y.Z # localgit push origin --delete vX.Y.Z # remoteSemver decision rule
Section titled “Semver decision rule”What kind of change since the last release?
Breaking (consumers must change their code) -> bump MAJOR (vX.Y.Z -> v(X+1).0.0)
New feature, backward-compatible (consumers can opt in) -> bump MINOR (vX.Y.Z -> vX.(Y+1).0)
Bug fix, backward-compatible (consumers don't need to know) -> bump PATCH (vX.Y.Z -> vX.Y.(Z+1))
Pre-1.0? -> API not yet stable; bumps are looser; aim for v1.0.0 when API stabilizesPre-release naming convention
Section titled “Pre-release naming convention”vX.Y.Z-alpha.1 # earliest; expect bugsvX.Y.Z-alpha.2 # iteratevX.Y.Z-beta.1 # more stable; user testingvX.Y.Z-beta.2vX.Y.Z-rc.1 # release candidate; should be the finalvX.Y.Z-rc.2 # only if rc.1 brokevX.Y.Z # the actual releaseCanonical release notes template
Section titled “Canonical release notes template”# vX.Y.Z - YYYY-MM-DD
## HighlightsOne-paragraph summary. Lead with what users care about most.
## Breaking changes- (only if there are any; otherwise omit)
## New features- Feature description (#issue-or-pr-number)
## Improvements- Performance, UX, or internal quality changes
## Bug fixes- Description (#issue-or-pr-number)
## Migration notesFor users upgrading from vX-1.Y.Z:- Step-by-step migration steps
## ContributorsThanks to @user1, @user2, and N others.Semver decision drill, model decisions
Section titled “Semver decision drill, model decisions”- Bug fix where login redirected to wrong URL -> PATCH bump. Backward-compatible internal fix.
- New endpoint
POST /api/v2/refunds(existing endpoints unchanged) -> MINOR bump. New feature, backward-compatible. - Removed deprecated
GET /api/v1/users-old-> MAJOR bump. Removing an endpoint breaks consumers still using it, regardless of how long it was deprecated. - Changed default value of API parameter from false to true -> MAJOR bump. Behavior change that breaks existing consumers who relied on the default.
- Improved performance of internal function (no API change) -> PATCH bump. Internal change with no consumer-visible API impact.
- Renamed internal class but kept public API identical -> PATCH bump. No consumer-visible change; internal refactor.
- Added new optional field to JSON response (existing fields unchanged) -> MINOR bump. New feature consumers can opt into; backward-compatible (old consumers ignore the new field).
- Added new required field to request body (existing requests now fail) -> MAJOR bump. Breaking change; existing consumers must update their requests.
What’s in L11
Section titled “What’s in L11”L11 introduces two powerful primitives:
-
Cherry-pick (
git cherry-pick <commit>), apply a specific commit from one branch onto another. Used for hotfixes that need to go to both main + a release branch; backporting fixes to older versions; pulling specific commits without merging an entire branch. -
Stash (
git stash), save in-progress work without committing it. Used when you need to switch branches urgently but your working dir has uncommitted changes; pulling without committing the WIP; multi-tasking.
Both are tools for composing the L1-L10 primitives into advanced workflows. After L11, you have the full Phase 3 toolkit.