Stai lavorando a una modifica su un branch, il codice è a metà, non pronto per un commit. Arriva una richiesta urgente: un bug da fixare subito, la richiesta di un cliente, una PR da revisionare. Cosa fai? Cancelli tutto? Fai un commit sporco che sporca la storia? No, usi git stash.
Noi, di Meteora Web, da anni gestiamo sviluppi su più fronti: quando arriva un’urgenza mentre siamo in mezzo a una feature, lo stash è la nostra ancora di salvataggio. In questa guida vediamo come usarlo senza rischi, quando conviene e quando invece è meglio cambiare approccio.
Perché usare git stash quando arriva un'interruzione?
Immagina di aver modificato 5 file su un branch di sviluppo. Se fai un git checkout su un altro branch, Git ti blocca: “Your local changes would be overwritten by checkout”. Hai due strade: fare un commit (magari incompleto, con messaggi tipo “WIP” o “ancora in lavorazione”) o perdere le modifiche. Entrambe sono brutte.
Sponsored Protocol
Lo stash risolve il problema: salva le modifiche non committate in una pila temporanea, pulisce la working directory, e te le restituisce quando vuoi. È un po’ come mettere in pausa il lavoro, senza chiuderlo.
Noi lo usiamo ogni giorno per:
- Passare a un hotfix urgente su un altro branch.
- Aiutare un collega su una PR mentre abbiamo modifiche locali.
- Provare un’idea “sporca” senza intaccare la storia di Git.
È veloce, reversibile e non inquina il log dei commit.
Come funziona git stash e quali sono i comandi base?
git stash salva automaticamente le modifiche sui file tracciati (quelli già aggiunti con git add o modificati) e ripristina la working directory allo stato dell’ultimo commit. Per includere anche i file nuovi non tracciati, si usa git stash -u (o --include-untracked).
Comando fondamentale: git stash
# Salva le modifiche correnti (tracciate)
git stash
# Salva anche file non tracciati
git stash -u
# Salva con un messaggio descrittivo (raccomandato!)
git stash push -m "WIP: refactoring modulo login"
Il comando git stash push -m "messaggio" è la versione moderna e ci permette di etichettare ogni stash — fondamentale quando ne accumuli più di uno.
Sponsored Protocol
Vedere la lista degli stash
git stash list
# Output tipico:
# stash@{0}: On develop: WIP refactoring modulo login
# stash@{1}: On feature-x: fix temporaneo API
Ogni stash ha un riferimento stash@{n} e un messaggio. Più ne fai, più cresce la lista. Noi consigliamo di non superare i 3-4 stash aperti per non perdersi.
Recuperare le modifiche
Due modi:
git stash pop— applica lo stash più recente e lo elimina dalla lista.git stash apply— applica lo stash ma lo mantiene in lista (utile se lo vuoi applicare su più branch).
# Applica e rimuove lo stash più recente
git stash pop
# Applica uno stash specifico
git stash apply stash@{1}
# Applica senza rimuovere
git stash apply
Attenzione:
git stash poppuò generare conflitti. Se li risolvi male, lo stash viene comunque rimosso. Megliogit stash applyla prima volta, verificare, e poigit stash dropa mano.Sponsored Protocol
Come recuperare o eliminare uno stash senza rischi?
Puoi anche ispezionare uno stash prima di applicarlo:
# Vedi i file modificati nello stash
git stash show stash@{0}
# Vedi il diff completo
git stash show -p stash@{0}
Se uno stash non serve più, lo elimini:
# Elimina lo stash più recente
git stash drop
# Elimina uno specifico
git stash drop stash@{2}
# Svuota tutta la lista
git stash clear
Consiglio operativo: dopo settimane di sviluppo, fai un git stash list e butta via gli stash che non ti servono. Noi lo facciamo ogni venerdì.
Come gestire conflitti quando applichi uno stash?
Se il branch su cui applichi lo stash ha modifiche conflittuali rispetto al punto in cui lo hai creato, Git ti dice:
Auto-merging file.php
CONFLICT (content): Merge conflict in file.php
A questo punto devi:
Sponsored Protocol
- Aprire i file in conflitto.
- Risolvere manualmente (accettare le tue, le loro, o una combinazione).
git adde poigit stash drop(se vuoi rimuoverlo) o lasciarlo.
Noi consigliamo di applicare stash sempre partendo da un branch pulito (dopo aver committato o stashed tutto) per ridurre i conflitti. In ogni caso, saper risolvere un merge conflict è essenziale: approfondisci nel nostro articolo Git per Sviluppatori.
Quando evitare di usare stash e usare invece un ramo?
Lo stash è perfetto per interruzioni brevi e temporanee (minuti, poche ore). Se invece il cambio di priorità dura giorni o settimane, crea un branch. Un ramo ti dà:
- Tracciabilità nella storia.
- Possibilità di condividere con il team.
- Backup automatico sul remoto.
Evita stash anche quando hai modifiche non committate su file di configurazione sensibili (ad esempio .env) — meglio aggiungerli a .gitignore e fare un commit separato.
Sponsored Protocol
Un altro caso: stash su file binari grandi può impiegare tempo e spazio. Preferisci commit temporanei su un branch locale.
Noi di Meteora Web abbiamo un flusso chiaro:
- Interruzione < 1 ora → stash.
- Interruzione > 1 ora o cambio di contesto lungo → branch con commit “WIP” locale, che poi squashiamo.
Cosa fare adesso
- Apri il terminale in un repository Git (anche un progetto di prova).
- Modifica un file, poi lancia
git statusper vedere le modifiche. - Esegui
git stash push -m "test primo stash". - Cambia branch con
git checkout main— funziona senza errori. - Torna al branch originale:
git checkout -e poigit stash pop. - Verifica che le modifiche siano riapparse.
Allenati con più stash, con -u, con apply, drop e clear. Imparare stash oggi ti eviterà di perdere codice o fare commit sporchi.
Vuoi approfondire l’intero flusso Git per il tuo team? Leggi la nostra guida completa a Git per sviluppatori.