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.
I due tipi
Section titled “I due tipi”| Tipo | Cosa contiene |
|---|---|
| Lightweight | Solo il nome: una semplice etichetta che punta a un commit |
| Annotated | Metadati extra: nome ed email dell’autore, data, e un messaggio di tag (come un messaggio di commit) |
Semantic versioning
Section titled “Semantic versioning”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.
Comandi
Section titled “Comandi”git tag # elenca tutti i tag del repogit 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 correntegit tag -a <nome> # crea un tag annotated (apre l'editor)git tag -a <nome> -m "msg" # annotated con messaggio inlinegit tag <nome> <hash> # tagga un commit più vecchio (l'HEAD è solo il default)git tag -f <nome> # forza il riuso di un tag già esistentegit tag -d <nome> # elimina un tag
git push --tags # invia TUTTI i tag non ancora presenti sul remote⚠️ I tag non vengono pushati da soli
Section titled “⚠️ I tag non vengono pushati da soli”Per default git push non trasferisce i tag al remote. Per inviarli (tutti in blocco) serve:
git push --tags