Gli sviluppatori devono spesso multitasking. Potresti lavorare su una nuova funzionalità e potrebbe esserci una richiesta per correggere un bug. Oppure potresti essere lo sviluppatore principale di più progetti.
Quando stai passando da un tempo, a volte non vuoi commettere un lavoro incompiuto. In questi casi, il comando Git Stash può essere di grande aiuto. Ti permette di impilare le modifiche e successivamente tornare al lavoro incompiuto senza aggiungere commit non necessari ai tuoi repository GIT.
Un flusso di lavoro per Git Stash
Inizializzano una filiale GIT Master e commettiamo un file readme.TXT.
$ mkdir my_project
$ cd my_project/
$ git init
$ touch readme.TXT
$ git aggiungi -a
$ git commit -m "inizializza"
Ora aggiungiamo un altro file chiamato a.txt al ramo principale.
$ touch a.TXTSe controlli la storia, vedrai:
$ git log --onelineOra creiamo un ramo di Feature1 e aggiungiamo una B.file txt:
$ git filiale caratteristica1Apri il tuo b.file txt in un editor e inserire la riga:
Sto per cambiare questo in ..E salva il file. Se controlli il tuo stato GIT, vedi quanto segue:
$ git status
Su Branch Feature1
Cambiamenti non messi in scena per commit:
(Usa "git aggiungi ..." per aggiornare ciò che verrà impegnato)
(Usa "Git Checkout - ..." per scartare le modifiche nella directory di lavoro)
modificato: b.TXT
Nessuna modifica aggiunta al commit (usa "git add" e/o "git commit -a")
Supponiamo, in questa fase, ricevi una richiesta per aggiornare A.file txt sul ramo principale. Ma non hai finito con la B.file txt. Se provi a controllare la filiale principale, ottieni il seguente errore:
$ git checkout master
Errore: le modifiche locali ai seguenti file verrebbero sovrascritte con il checkout:
B.TXT
Si prega di commettere le modifiche o riponirle prima di poter cambiare le filiali.
Abortire
Ma non vuoi commettere il lavoro incompiuto in B.TXT. Puoi usare lo stash Git in questa situazione:
$ git stashSe controlli b.txt, dovrebbe essere vuoto:
$ gatto b.TXTSe controlli la scorta, vedrai:
$ Git Stash List
Stash@0: WIP su Fect1: 2cfe39b aggiunto b.TXT
Se provi a controllare la filiale principale, dovresti essere in grado di farlo ora:
$ git checkout master
Passato a Branch 'Master'
Supponiamo di apportare le modifiche alle necessarie sul master e quindi di tornare al ramo Fect1:
$ git checkout funzioni1
Il tuo B.txt è ancora vuoto:
$ gatto b.TXTMa se si ottengono le modifiche dalla scorta usando il seguente comando:
$ git stash applica
Su Branch Feature1
Cambiamenti non messi in scena per commit:
(Usa "git aggiungi ..." per aggiornare ciò che verrà impegnato)
(Usa "Git Checkout - ..." per scartare le modifiche nella directory di lavoro)
modificato: b.TXT
Nessuna modifica aggiunta al commit (usa "git add" e/o "git commit -a")
Il comando applicazione stash ha preso le modifiche ripiegate e lo ha applicato a b.file txt
Puoi completare il tuo lavoro in B.txt la mia modifica della riga
A
Ora vai avanti e impegna le tue modifiche:
$ git aggiungi -aL'applicazione di una scorta non la pulirà automaticamente dalla scorta. Devi ripulirlo manualmente:
$ git stash drop
Riforniti/stash rilasciati@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Perché git stash con il nome?
La stash Git è uno stack. Quindi puoi continuare a accumulare le tue modifiche.
Supponiamo di aggiungere "X" a B.txt, riponirlo, aggiungere un "y" a b.txt, riponi e aggiungi una "z" a b.txt e rifornilo. Se controlli la storia della scorta, vedrai qualcosa del genere:
$ Git Stash ListNon hai modo di sapere quale scorta ha quale cambiamento. Quando stai riponendo, puoi utilizzare l'opzione Salva per inserire commenti. Puoi usare i commenti per allegare un nome alla tua scorta e renderli riconoscibili:
$ git stash salva "x"
Directory di lavoro salvata e stato indice su Feature1: x
La testa è ora a 2d6f515 modificata b.TXT
Per aggiungere modifiche "X", "Y" e "Z", è possibile ottenere quanto segue nella tua scorta utilizzando l'opzione Salva per ogni scorta:
$ Git Stash List
Stash@0: su Feature1: Z
Stash@1: su Feature1: y
Stash@2: su Feature1: x
Ora hai un nome per ogni modifica che hai nascosto. Sfortunatamente, non puoi usare il nome per recuperare la scorta. Dovrai usare il numero di scorta. Supponiamo di voler ottenere il tuo cambiamento "y". Vedi che stash@1 è y. Quindi puoi applicare quella modifica al tuo ramo attuale:
$ git stash applica stash@1
E il tuo b.txt dovrebbe avere le modifiche da stash@1.
Puoi usare lo stesso metodo per far cadere una scorta. Supponiamo, ti rendi conto di non aver più bisogno della X Stash. Puoi semplicemente usare il seguente comando per eliminare quella scorta:
$ git stash drop stash@2
E la scorta dovrebbe essere sparita:
$ Git Stash List
Stash@0: su Feature1: Z
Stash@1: su Feature1: y
Ricorda che se si utilizza le opzioni Applica e rilascia senza parametri, utilizzerà la parte superiore dello stack (Stash@0).
Il comando Git Stash è un modo potente per gestire l'area di lavoro. Padroneggiare questo comando ti aiuterà a lavorare in modo più efficiente.
Stack Overflow: How-to-name-and-retrieve-a-casta per nome-in-git