modulo 03 / lezione 14

Branch e merge

git stash: mettere via il lavoro temporaneamente

Salvare modifiche non pronte per il commit quando serve cambiare contesto, senza inquinare la storia.

60 min Git e controllo versione

git stash: mettere via il lavoro temporaneamente

git stash serve a mettere da parte lavoro non pronto quando devi cambiare contesto. È utile per un hotfix urgente, per provare un branch pulito, per fare pull o rebase senza portarti dietro modifiche locali.

Ma lo stash non è un archivio. È un parcheggio temporaneo. Se lo usi come magazzino, prima o poi dimentichi cosa contiene.

Perché questa lezione conta

Nel lavoro reale vieni interrotto. Stai lavorando a una feature e devi correggere un bug in produzione. Hai modifiche locali non committabili, ma devi cambiare branch. stash ti permette di farlo senza creare commit finti.

Usarlo bene significa dare nomi, controllare cosa entra e svuotarlo presto.

Obiettivo operativo

Alla fine della lezione devi saper creare stash con messaggio, includere file untracked quando serve, applicare senza rimuovere, poppare, ispezionare e trasformare uno stash lungo in branch.

Comandi base

git stash push -m "wip form login"
git stash list
git stash show stash@{0}
git stash show -p stash@{0}
git stash pop

pop applica e rimuove lo stash se tutto va bene. Se vuoi applicare senza rimuovere:

git stash apply stash@{0}

Poi puoi eliminarlo:

git stash drop stash@{0}

File untracked

Di default, stash salva modifiche a file già tracciati. Per includere file nuovi:

git stash push -u -m "wip login con nuovi test"

-u include untracked. Per includere anche ignored:

git stash push -a

-a è raro e rischioso: può includere build output, dipendenze o file grandi.

Stash parziale

Puoi stashed solo alcuni file:

git stash push -m "wip auth" -- src/auth.ts src/session.ts

Oppure interattivo:

git stash push -p

Utile quando vuoi mettere via un esperimento ma lasciare un fix pronto per commit.

Stash e branch

Se uno stash dura più di qualche giorno, probabilmente doveva essere un branch.

Puoi creare un branch da uno stash:

git stash branch wip/login stash@{0}

Git crea un branch dal commit su cui lo stash era stato creato e applica lo stash lì. È spesso più pulito che applicare uno stash vecchio su una base cambiata.

Conflitti nello stash

git stash pop può generare conflitti. Non è diverso da un merge: hai modifiche salvate tempo fa che non si applicano più pulite alla situazione attuale.

In caso di conflitto:

  1. leggi git status;
  2. risolvi i marker;
  3. fai git add;
  4. se pop non ha droppato lo stash, eliminalo solo dopo verifica.

Non cancellare lo stash finché non sei sicuro che il lavoro sia recuperato.

Laboratorio guidato

Simula:

  1. inizi una feature;
  2. modifichi due file e crei un test nuovo;
  3. arriva hotfix urgente;
  4. fai stash con -u e messaggio;
  5. cambi branch, fai hotfix e commit;
  6. torni e applichi lo stash;
  7. trasformi lo stash in branch se crea conflitti o se il lavoro è cresciuto.

Output atteso

Una regola personale:

Stash solo con messaggio.
Stash vive massimo pochi giorni.
Stash vecchio -> branch.
Prima di pop: status pulito.
Dopo pop: test o almeno diff.

Errori comuni

Stash senza messaggio. Dopo tre stash, WIP on main non dice nulla.

Usare stash come backlog. Il backlog vive in issue o branch, non nello stash.

Dimenticare file untracked. Se servono, usa -u.

Poppare su branch sbagliato. Controlla git status -sb prima.

Checklist di verifica

  • so creare stash con messaggio;
  • so includere file untracked;
  • so vedere patch dello stash;
  • so applicare senza droppare;
  • so creare branch da stash vecchio.

Collegamenti

  • Modulo: Branch e merge — lezione 14 del corso.
  • git worktree nel modulo 7 può ridurre il bisogno di stash continui.