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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow