Git - Operazione Stash

Supponiamo che tu stia implementando una nuova funzionalità per il tuo prodotto. Il tuo codice è in corso e improvvisamente arriva un'escalation di clienti. Per questo motivo, devi tenere da parte il lavoro sulle nuove funzionalità per alcune ore. Non è possibile eseguire il commit del codice parziale e inoltre non è possibile eliminare le modifiche. Quindi hai bisogno di uno spazio temporaneo, dove puoi memorizzare le tue modifiche parziali e successivamente eseguirne il commit.

In Git, l'operazione stash prende i tuoi file tracciati modificati, mette in scena le modifiche e li salva in una pila di modifiche non completate che puoi riapplicare in qualsiasi momento.

[[email protected] project]$ git status -s
M string.c
?? string

Ora, vuoi cambiare ramo per l'escalation dei clienti, ma non vuoi impegnare ciò su cui stai ancora lavorando; così potrai nascondere le modifiche. Per inserire una nuova scorta nella tua pila, esegui ilgit stash comando.

[[email protected] project]$ git stash
Saved working directory and index state WIP on master: e86f062 Added my_strcpy function
HEAD is now at e86f062 Added my_strcpy function

Ora, la tua directory di lavoro è pulita e tutte le modifiche vengono salvate in uno stack. Verifichiamo con ilgit status comando.

[[email protected] project]$ git status -s
?? string

Ora puoi cambiare filiale in sicurezza e lavorare altrove. Possiamo visualizzare un elenco di modifiche nascoste utilizzando il filegit stash list comando.

[[email protected] project]$ git stash list
[email protected]{0}: WIP on master: e86f062 Added my_strcpy function

Supponi di aver risolto l'escalation del cliente e sei tornato sulla tua nuova funzionalità alla ricerca del tuo codice a metà, esegui semplicemente il git stash pop comando, per rimuovere le modifiche dallo stack e posizionarle nella directory di lavoro corrente.

[[email protected] project]$ git status -s
?? string

[[email protected] project]$ git stash pop

Il comando precedente produrrà il seguente risultato:

# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
#
modified: string.c
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
#
string
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/[email protected]{0} (36f79dfedae4ac20e2e8558830154bd6315e72d4)

[[email protected] project]$ git status -s
M string.c
?? string