Sinossi
git stash push -p -m <msg> -- <pathspec>
git stash branch <newbranch> [<stash>]
git stash create
git stash store -m <msg> <sha>
Descrizione
Oltre a git stash push e git stash pop, il macchinario stash offre potenti capacità per workflow avanzati. Puoi stashare path specifici, stashare hunk specifici con -p, ricreare un branch da uno stash che confligge con lo stato corrente, o anche creare un oggetto stash senza memorizzarlo nello stack (poi memorizzarlo dopo con un messaggio personalizzato).
Internamente, ogni stash è un merge commit tra WIP-on-branch (la working tree) e index-on-branch (le modifiche in stage), con il parent che è la punta del branch. Questa struttura è ciò che permette a stash branch e stash apply di ricostruire lo stato esatto.
Nell'uso quotidiano, git stash (advanced) si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Sottocomando / Opzione | Descrizione |
|---|---|
push -p | Stash di hunk scelti interattivamente. |
push -- <pathspec> | Stash solo dei path specificati. |
--keep-index | Stash ma mantiene ciò che è già in stage. |
--no-keep-index | Resetta l'index allo stash (default). |
branch <name> | Ricrea lo stato su un branch fresco. |
create | Crea un commit stash ma non lo memorizza. |
store -m | Mette un commit esistente sullo stack. |
Esempi
git stash push -p -m "WIP: solo modifiche di refactor" -- src/refactor/
# Stash solo path specifici, interattivamente
git stash --keep-index -m "Test pre-staged"
# Verifica che le modifiche in stage passino i test, con WIP da parte
git stash branch fix-from-stash stash@{2}
# Risuscita uno stash che non si applica più pulitamente
SHA=$(git stash create "checkpoint")
git stash store -m "checkpoint manuale" "$SHA"
# Creazione programmatica di stash
Errori comuni
Fare stash durante un merge o rebase mescola gli stati e confonde lo stack. Evita. Stash di lunga durata sopravvivono al loro contesto — rivedi periodicamente. --keep-index è ottimo per verificare modifiche in stage, ma lo stash risultante include sia contenuto in stage che fuori, il che può sorprendere.
Comandi correlati
git stash, git commit --fixup, git worktree, git restore