Ricerca…
Sintassi
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
Parametri
Parametro | Dettagli |
---|---|
mostrare | Mostra le modifiche registrate nella memoria come diff tra lo stato nascosto e il genitore originale. Quando non viene specificato <stash>, mostra l'ultimo. |
elenco | Elenca gli stashes che hai attualmente. Ogni stash è elencato con il suo nome (ad es. Lo stash @ {0} è l'ultimo stash, lo stash @ {1} è quello precedente, ecc.), Il nome del ramo corrente al momento della stash e un breve descrizione del commit su cui si basava lo stash. |
pop | Rimuovere un singolo stato nascosto dall'elenco delle riserve e applicarlo sopra lo stato attuale dell'albero di lavoro. |
applicare | Come pop , ma non rimuovere lo stato dall'elenco di stash. |
chiaro | Rimuovi tutti gli stati nascosti. Si noti che tali stati saranno quindi soggetti a potature e potrebbero essere impossibili da recuperare. |
far cadere | Rimuovere un singolo stato nascosto dall'elenco di riserva. Quando non viene specificato <stash>, rimuove l'ultimo. es. stash @ {0}, altrimenti <stash> deve essere un riferimento al registro di stash valido del modulo stash @ {<revision>}. |
creare | Crea una scorta (che è un normale oggetto commit) e restituisce il suo nome oggetto, senza memorizzarlo da nessuna parte nello spazio dei nomi ref. Questo è pensato per essere utile per gli script. Probabilmente non è il comando che vuoi usare; vedi "salva" sopra. |
memorizzare | Memorizza una data copia creata tramite git stash create (che è un commit merge merge) nel ref di stash, aggiornando il reflog di stash. Questo è pensato per essere utile per gli script. Probabilmente non è il comando che vuoi usare; vedi "salva" sopra. |
Osservazioni
Stashing ci consente di avere una directory di lavoro pulita senza perdere alcuna informazione. Quindi, è possibile iniziare a lavorare su qualcosa di diverso e / o cambiare ramo.
Cos'è la conservazione?
Quando si lavora su un progetto, si potrebbe essere a metà della modifica di un ramo di funzionalità quando viene rilevato un bug nei confronti del master. Non sei pronto per eseguire il commit del tuo codice, ma non vuoi perdere le tue modifiche. Questo è dove git stash
è utile.
Esegui lo git status
su un ramo per mostrare le tue modifiche senza commit:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Quindi esegui git stash
per salvare queste modifiche in una pila:
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
Se hai aggiunto dei file alla tua directory di lavoro, anche questi possono essere nascosti. Devi solo metterli in scena per primi.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
La directory di lavoro ora è pulita da eventuali modifiche apportate. Puoi vedere questo facendo rieseguire lo git status
:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Per applicare l'ultima scorta, esegui git stash apply
(in aggiunta, puoi applicare e rimuovere l'ultimo stashed modificato con git stash pop
):
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Si noti, tuttavia, che la memorizzazione non ricorda il ramo su cui si stava lavorando. Negli esempi sopra, l'utente stava nascondendo sul master . Se passano al ramo dev , dev , ed eseguono git stash apply
l'ultimo stash messo sul ramo dev .
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Crea lo stash
Salva lo stato corrente della directory di lavoro e l'indice (noto anche come area di staging) in una pila di file.
git stash
Per includere tutti i file non tracciati nella memoria usa i flag --include-untracked
o -u
.
git stash --include-untracked
Per includere un messaggio con la tua scorta per renderlo più facilmente identificabile in seguito
git stash save "<whatever message>"
Per lasciare l'area di staging nello stato corrente dopo la scorta usare i --keep-index
o -k
.
git stash --keep-index
Elenca le barre salvate
git stash list
Questo elencherà tutti gli stash nella pila in ordine cronologico inverso.
Otterrai una lista simile a questa:
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
È possibile fare riferimento alla memoria specifica con il suo nome, ad esempio stash@{1}
.
Mostra lo stash
Mostra le modifiche salvate nell'ultima sequenza
git stash show
O una scorta specifica
git stash show stash@{n}
Per mostrare il contenuto delle modifiche salvate per lo stash specifico
git stash show -p stash@{n}
Rimuovi la scorta
Rimuovi tutto
git stash clear
Rimuove l'ultima scorta
git stash drop
O una scorta specifica
git stash drop stash@{n}
Applicare e rimuovere la scorta
Per applicare l'ultima scorta e rimuoverla dallo stack, digita:
git stash pop
Per applicare lo stash specifico e rimuoverlo dallo stack - digitare:
git stash pop stash@{n}
Applicare la scorta senza rimuoverla
Applica l'ultima scorta senza rimuoverla dallo stack
git stash apply
O una scorta specifica
git stash apply stash@{n}
Ripristino di modifiche precedenti dalla memoria
Per ottenere la tua scorta più recente dopo aver eseguito git stash, usa
git stash apply
Per vedere un elenco dei tuoi scorte, usa
git stash list
Otterrai una lista che assomiglia a questo
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Scegli un diverso git stash da ripristinare con il numero che appare per la scorta che vuoi
git stash apply stash@{2}
Scorta parziale
Se desideri mettere da parte solo alcune differenze nel tuo working set, puoi usare una scorta parziale.
git stash -p
E poi selezionare in modo interattivo quali hunk da mettere in scorta.
Dalla versione 2.13.0 puoi anche evitare la modalità interattiva e creare una scorta parziale con un pathspec usando la nuova parola chiave push .
git stash push -m "My partial stash" -- app.config
Applicare parte di una scorta con checkout
Hai fatto una scorta e desideri eseguire il checkout solo su alcuni file in quella cartella.
git checkout stash@{0} -- myfile.txt
Stash interattivo
Lo stashing prende lo stato sporco della tua directory di lavoro, cioè i tuoi file di tracciamento modificati e le modifiche di stage, e lo salva su una pila di modifiche non completate che puoi riapplicare in qualsiasi momento.
Conservando solo i file modificati:
Supponiamo di non voler mettere in archivio i file di staging e solo di nascondere i file modificati in modo da poter usare:
git stash --keep-index
Quale archivierà solo i file modificati.
Memorizzazione di file non tracciati:
Stash non salva mai i file non tracciati ma archivia solo i file modificati e messi in scena. Quindi supponiamo che se hai bisogno di nascondere anche i file non tracciati, puoi usare questo:
git stash -u
questo traccerà i file non tracciati, messi in scena e modificati.
Nascondi solo alcune modifiche particolari:
Supponiamo di aver bisogno di scomporre solo parte del codice dal file o solo alcuni file solo da tutti i file modificati e nascosti, quindi puoi farlo in questo modo:
git stash --patch
Git non riporterà tutto ciò che è stato modificato, ma ti chiederà invece in modo interattivo quale delle modifiche desideri memorizzare e che vorresti conservare nella tua directory di lavoro.
Sposta il tuo lavoro in corso in un altro ramo
Se mentre lavori ti rendi conto di essere nella branca sbagliata e non hai ancora creato alcun commit, puoi spostare facilmente il tuo lavoro per correggere il ramo usando lo stashing:
git stash
git checkout correct-branch
git stash pop
Ricorda git stash pop
applicherà l'ultima scorta e la cancellerà dalla lista di scorta. Per mantenere la scorta nell'elenco e applicare solo ad alcuni rami è possibile utilizzare:
git stash apply
Recupera una scorta abbandonata
Se lo hai appena estratto e il terminale è ancora aperto, avrai ancora il valore hash stampato da git stash pop
sullo schermo:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Nota che git stash drop produce anche la stessa linea.)
Altrimenti, puoi trovarlo usando questo:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Questo ti mostrerà tutti i commit ai vertici del tuo grafico di commit che non sono più referenziati da alcun ramo o tag - ogni commit perso, incluso ogni commit di stash che tu abbia mai creato, sarà da qualche parte in quel grafico.
Il modo più semplice per trovare il commit dello stash che desideri è probabilmente passare gitk
a gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
Verrà avviato un browser di repository che mostra ogni singolo commit nel repository di sempre , indipendentemente dal fatto che sia raggiungibile o meno.
Puoi sostituire gitk
con qualcosa come git log --graph --oneline --decorate
se preferisci un bel grafico sulla console su un'applicazione GUI separata.
Per individuare i commit stash, cerca i messaggi di commit di questo modulo:
WIP su somebranch : commithash Qualche vecchio messaggio di commit
Una volta che conosci l'hash del commit che vuoi, puoi applicarlo come scorta:
git stash apply $stash_hash
Oppure puoi utilizzare il menu di scelta rapida in gitk
per creare rami per qualsiasi commit irraggiungibile a cui sei interessato. Dopo di ciò, puoi fare quello che vuoi con loro con tutti gli strumenti normali. Quando hai finito, butta via di nuovo quei rami.