Git ha un'area chiamata stash (area di accantonamento) dove puoi temporaneamente conservare una istantanea dei tuoi cambiamenti senza doverli inviare al repository tramite commit. È un'area separata dalla directory di lavoro, l'area di staging o il repository.

Questa funzionalità è utile quando hai fatto modifiche in un branch, ma non sei ancora pronto per passarle alla fase di commit, tuttavia vorresti passare a un altro branch.

Modifiche allo Stash

Per salvare le tue modifiche nello stash esegui il comando:

git stash save "messaggio opzionale a tuo beneficio"

Questo salva le modifiche e riporta la directory di lavoro allo stato nella quale si trovava all'ultimo commit. Le modifiche accantonate nello stash sono disponibili per qualsiasi branch in quel repository.

Nota che le modifiche che vuoi accantonare nello stash devono essere su file tracciati. Se hai creato un nuovo file e cerchi di accantonare le tue modifiche, potresti ottenere l'errore No local changes to save (non ci sono modifiche locali da salvare).

Visualizza le Modifiche nello Stash

Per vedere cosa si trova nel tuo stash esegui il comando:

git stash list

Questo comando restituisce un elenco delle tue istantanee salvate nel formato stash@{0}: BRANCH-RELATIVO-ALLE-MODIFICHE-ACCANTONATE: MESSAGGIO. La parte stash@{0} è il nome dello stash, e il numero tra parentesi graffe ({ }) è l'indice dello stash. Se ci sono molteplici gruppi di modifiche accantonate, ciascuna avrà un indice diverso.

Se dimentichi quali cambiamenti sono stati fatti nello stash, puoi vederne un sommario con  git stash show NOME-DELLO-STASH. Se vuoi vedere la tipica disposizione della patch in stile diff (con i + e i  - per ogni riga modificata), puoi includere l'opzione  -p (per patch) . Ecco un esempio:

git stash show -p stash@{0}

# Example result:
diff --git a/PathToFile/fileA b/PathToFile/fileA
index 2417dd9..b2c9092 100644
--- a/PathToFile/fileA
+++ b/PathToFile/fileA
@@ -1,4 +1,4 @@
-What this line looks like on branch
+What this line looks like with stashed changes

Recuperare le Modifiche Accantonate

Per estrarre le modifiche dall'area di stash e applicarle al branch corrente sul quale ti trovi, hai due opzioni:

  1. git stash apply NOME-STASH applica le modifiche e lascia una copia nell'area di stash
  2. git stash pop NOME-STASH applica le modifiche e rimuove i file dall'area di stash

Potrebbero esserci conflitti quando applichi le modifiche. Puoi risolverli in modo simile a merge  (vedi git merge per i dettagli).

Eliminare le Modifiche nello Stash

Se vuoi eliminare le modifiche accantonate senza applicarle esegui il comando:

git stash drop NOME-STASH

Per eliminare l'intera area di stash esegui il comando:

git stash clear