Scarta Git Stash Pop


133

Ho fatto un pop stash e ora ho un sacco di conflitti. Avevo commesso tutto il mio codice recente prima del git stash pop, quindi c'è un modo per tornare all'ultimo commit e sbarazzarsi di tutti i conflitti e codificare l' git stash popiniezione?


Vuoi ancora salvare il lavoro spuntato o non vuoi mai vederlo di nuovo?
jscs,

1
No, non voglio il lavoro di Popped. Ho fatto la scorta come 4 mesi fa e non sei sicuro di cosa ci sia dentro?
jog

2
Ti interessano cose che non sono state confermate prima di riporre?
Andrew Marshall,

Quelli 4 mesi fa o quelli oggi? Voglio quello che avevo un'ora fa.
jdog,

5
Se ci sono conflitti quando git stashgit non eliminerà lo stash dall'elenco. Quindi git reset --hard HEADnon distrugge il lavoro spuntato.
jwadsack,

Risposte:


189

Questo è già stato chiesto e risposto su StackOverflow (vedi Come ripristinare il repository Git a un commit precedente? ), Ma la risposta semplice è:

git reset --hard HEAD

Questo dovrebbe occuparsi del tuo problema. Si noti che ciò rimuove tutte le modifiche non impegnate dal repository.

Si noti che se ci sono conflitti, lo stash viene conservato. Dai documenti stash :

L'applicazione dello stato può fallire con i conflitti; in questo caso, non viene rimosso dall'elenco di stash. È necessario risolvere git stash dropmanualmente i conflitti e chiamare manualmente in seguito.


1
Ciò ripristinerà il repository locale all'ultimo commit. Dovresti essere in grado di spingere tutti i tuoi commit (dall'ultima spinta) senza problemi. Se non funziona, quindi inviare i risultati alla domanda precedente). In bocca al lupo.
MichaelMilom,

28
Ma questo ti farà perdere la scorta
K. Weber,

19
@ K.Weber in caso git stash popdi conflitto, lo stash non verrà eliminato dall'elenco di stash.
Daiwei,

1
Non sono sicuro di chi stia votando "in realtà non perderai la tua scorta", ho appena perso il mio
Anthony

4
Non più di una soluzione di imho, in quanto sottolinea che si dovrà perdere le modifiche uncommited.
Ivan P,

4

Il ripristino può anche essere chiamato su file specifici:

git reset HEAD <filename>...

Tuttavia, non è possibile ripristinare un file. Ma puoi ripristinare le modifiche con il checkout in seguito:

git checkout -- <filename>...

La tua scorta verrà preservata, come sottolineato da Luke nella risposta di MichaelMilom.

Ciò è utile quando non si desidera perdere le modifiche locali non impegnate.


0

Se non vuoi più vedere il lavoro nello stash spuntato, questo è semplice come un hard reset:

git reset --hard HEAD

Questo dice a git di ignorare il fatto che hai apportato modifiche senza commit alla tua directory di lavoro e imposta la directory di lavoro, l'area di gestione temporanea e vai al commit specificato - in questo caso, HEAD esistente, che contiene tutto il lavoro che hai ho appena commesso.

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.