git stash applica la versione


513

Ho 2 rami: maestro | design

Lavorando nel design ho fatto una scorta e sono passato al master, ho apportato alcune modifiche. Sono tornato al design e ho fatto stash applysolo per perdere tutte le mie modifiche nel ramo del design.

Spero che tutto il mio lavoro sia all'interno di una scorta perché non li ho cancellati o rimossi.

Se faccio un elenco di stash ottengo 4 risultati:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Se provo git stash apply f2c0c72, visualizzo un errore:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Come posso applicare una scorta specifica?


26
Nota che ora hai (Q4 2016, Git 2.11) la sintassi git stash apply 0(invece di git stash apply stash@{0}). Vedi la mia risposta qui .
VonC,

Risposte:


839

Le chiavi nella scorta sono in realtà gli stash@{n}oggetti a sinistra. Allora prova:

git stash apply stash@{0}

(nota che in alcune conchiglie devi citare "stash@{0}", come zsh, fish e powershell).

Dalla versione 2.11, è abbastanza semplice, è possibile utilizzare il numero di stack N anziché utilizzare stash@{n}. Quindi ora invece di usare:

git stash apply "stash@{n}"

Puoi digitare:

git stash apply n

Per ottenere l'elenco degli stash:

git stash list

In realtà stash@{0}è una revisione in git che puoi passare a ... ma git stash apply ...dovresti capire come DTRT per applicarlo alla tua posizione corrente.


90
Solo una nota che su alcune shell, stash @ {n} deve essere citato.
Senjai,

7
Un altro consiglio: puoi fare, ad esempio, gitk stash@{0}per mostrare le modifiche apportate in una particolare scorta.
antinome,

11
Gli utenti di zsh devono raddoppiare la citazione, ad es.git stash apply "stash@{0}"
mynameistechno

7
stash@{n}è il comando più imbarazzante da digitare. Esistono scorciatoie per farlo oltre a creare il tuo alias o funzione?
Dylanthepiguy,

2
git stash apply nè pacifico
Victor,

242

Per applicare uno stash e rimuoverlo dall'elenco di stash, eseguire:

git stash pop stash@{n}

Per applicare uno stash e mantenerlo nella cache dello stash, eseguire:

git stash apply stash@{n}

8
Questo è fantastico, grazie per la distinzione tra le due opzioni. Ho appena provato questo e sembra che se si apre uno stash dal ramo-a al ramo-b, lo stash rimarrà comunque nella cache degli stash. Immagino che sarebbe così hai ancora la possibilità di pop / applicare lo stash a branch-a in una data futura. Spero davvero che abbia senso. Maneggevole!
Longda,

42
Per PowerShell:git stash pop "stash@{n}"
ankitjaininfo

1
PowerShell è contento delle parentesi graffe tra virgolette / virgolette singole:git stash apply stash@"{n}"
m1kael

PowerShell accetterà anche git stash apply stash@`{n`}(notare i backtick prima delle parentesi graffe).
Ian Kemp,

52

Dalla versione 2.11, è abbastanza semplice, puoi usare il numero di stack N invece di dire "stash@{n}". Quindi ora invece di usare:

git stash apply "stash@{n}"

Puoi digitare:

git stash apply n

Ad esempio, nell'elenco:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Se si desidera applicare stash@{1}è possibile digitare:

git stash apply 1

Altrimenti, puoi usarlo anche se hai alcune modifiche nella tua directory dall'1.7.5.1, ma devi essere sicuro che lo stash non sovrascriverà le modifiche alla directory di lavoro se si verifica un errore:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

Nelle versioni precedenti alla 1.7.5.1, si rifiutava di funzionare se si verificava una modifica nella directory di lavoro.


Note di rilascio di Git:

L'utente deve sempre dire "stash @ {$ N}" quando assegna un nome a un singolo elemento nella posizione predefinita dello stash, ovvero reflog in refs / stash. Il comando "git stash" ha imparato ad accettare "git stash apply 4" come abbreviazione di "git stash apply stash @ {4}"

git stash apply "usato per rifiutare di lavorare in caso di cambiamenti nell'albero di lavoro, anche quando la modifica non si sovrapponeva alla modifica registrata


41

Se uno si trova su un computer Windows e in PowerShell, è necessario citare un argomento come:

git stash apply "stash@{0}"

... o per applicare le modifiche e rimuovere dalla scorta:

git stash pop "stash@{0}"

Altrimenti senza le virgolette potresti ricevere questo errore:

fatale: argomento ambiguo 'stash @': revisione sconosciuta o percorso non nell'albero di lavoro.


Apparentemente è così che devi farlo anche quando usi le conchiglie di pesce su Mac OSX 10.11.
lps

8
git stash list

quindi seleziona lo stash da applicare e usa solo il numero:

git stash apply 1

2
Git Stash list 

L'elenco mostrerà tutti gli oggetti nascosti, ad esempio: stash @ {0} :, stash @ {1}:, .., stash @ {n}:

Quindi selezionare il numero n che indica lo stash @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.