Skip to content

Modulo 17 — Tag

I tag sono puntatori a punti specifici della history. Servono a “contrassegnare” un momento particolare, tipicamente le versioni di rilascio (v4.1.0, v4.1.1, …).

Pensali come riferimenti da branch che NON cambiano: una volta creato, un tag punta per sempre allo stesso commit. È solo un’etichetta.

Nel frattempo i branch proseguono (feature, bugfix, refactor…): i tag restano fermi sulle versioni, come pietre miliari della history.

TipoCosa contiene
LightweightSolo il nome: una semplice etichetta che punta a un commit
AnnotatedMetadati extra: nome ed email dell’autore, data, e un messaggio di tag (come un messaggio di commit)

La specifica del semantic versioning standardizza il significato delle versioni: tre numeri separati da punti.

2.4.1
│ │ └─ PATCH release
│ └─── MINOR release
└───── MAJOR release
  • 1.0.0 — tipicamente la prima release ufficiale.
  • 1.0.1 (patch) — niente feature nuove: bug fix e correzioni che non cambiano l’uso del codice.
  • 1.1.0 (minor) — nuove funzionalità ma retrocompatibili: niente breaking changes, le novità sono opzionali.
  • 2.0.0 (major) — cambiamenti significativi non retrocompatibili: feature rimosse o cambiate radicalmente.
Terminal window
git tag # elenca tutti i tag del repo
git tag -l "*beta*" # filtra con wildcard (pattern -l)
git checkout <tag> # esplora lo stato del repo a quel tag
# (attenzione: entra in detached HEAD!)
git tag <nome> # crea un tag lightweight sull'HEAD corrente
git tag -a <nome> # crea un tag annotated (apre l'editor)
git tag -a <nome> -m "msg" # annotated con messaggio inline
git tag <nome> <hash> # tagga un commit più vecchio (l'HEAD è solo il default)
git tag -f <nome> # forza il riuso di un tag già esistente
git tag -d <nome> # elimina un tag
git push --tags # invia TUTTI i tag non ancora presenti sul remote

Per default git push non trasferisce i tag al remote. Per inviarli (tutti in blocco) serve:

Terminal window
git push --tags