Modulo 09 — Stashing
Il problema
Section titled “Il problema”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?
- Le modifiche ti seguono nel branch di destinazione (mischiate a altro lavoro), oppure
- Git si rifiuta di switchare se rileva potenziali conflitti.
Nessuna delle due è ideale. La soluzione: mettere da parte le modifiche senza fare commit inutili.
git stash
Section titled “git stash”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.
git stash pop
Section titled “git stash pop”Quando vuoi riprendere il lavoro:
git stash popRimuove lo stash più recente dalla pila e ri-applica le modifiche alla working copy.
git stash apply
Section titled “git stash apply”Come pop, ma lo stash resta nella pila:
git stash applyUtile se vuoi applicare le stesse modifiche su più branch.
⚠️ Untracked files
Section titled “⚠️ Untracked files”I file mai tracciati da Git non finiscono nello stash di default. Per includerli:
git stash -uStash multipli
Section titled “Stash multipli”Puoi fare stash ripetutamente: si accumulano in una pila, nell’ordine in cui li hai creati.
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 logstash@{0} è il più recente.
Applicare uno stash specifico
Section titled “Applicare uno stash specifico”git stash apply stash@{2} # di default si applica stash@{0}Eliminare gli stash
Section titled “Eliminare gli stash”git stash drop stash@{2} # elimina uno stash specificogit stash clear # elimina tutti gli stashIn pratica
Section titled “In pratica”Nella vita di tutti i giorni serve quasi solo la coppia:
git stash # metti da parte...# ...fai altro...git stash pop # ...e riprendiIl resto dei comandi è per casi più rari.