Skip to content

Modulo 09 — Stashing

Sei su un branch (es. puppy) con modifiche non ancora committate, e devi tornare su master per un’emergenza. Cosa succede al lavoro in corso?

  1. Le modifiche ti seguono nel branch di destinazione (mischiate a altro lavoro), oppure
  2. Git si rifiuta di switchare se rileva potenziali conflitti.

Nessuna delle due è ideale. La soluzione: mettere da parte le modifiche senza fare commit inutili.

Terminal window
git stash # (equivalente: git stash save)

Prende tutte le modifiche non committate (sia staged che unstaged), le mette nello stash e riporta la working copy allo stato pulito. Ora puoi switchare, fare commit, ecc.

Quando vuoi riprendere il lavoro:

Terminal window
git stash pop

Rimuove lo stash più recente dalla pila e ri-applica le modifiche alla working copy.

Come pop, ma lo stash resta nella pila:

Terminal window
git stash apply

Utile se vuoi applicare le stesse modifiche su più branch.

I file mai tracciati da Git non finiscono nello stash di default. Per includerli:

Terminal window
git stash -u

Puoi fare stash ripetutamente: si accumulano in una pila, nell’ordine in cui li hai creati.

Terminal window
git stash list
# stash@{0}: WIP on master: 049d078 Create index file
# stash@{1}: WIP on master: c264051 Revert "Add file_size"
# stash@{2}: WIP on master: 21d80a5 Add number to log

stash@{0} è il più recente.

Terminal window
git stash apply stash@{2} # di default si applica stash@{0}
Terminal window
git stash drop stash@{2} # elimina uno stash specifico
git stash clear # elimina tutti gli stash

Nella vita di tutti i giorni serve quasi solo la coppia:

Terminal window
git stash # metti da parte...
# ...fai altro...
git stash pop # ...e riprendi

Il resto dei comandi è per casi più rari.