Come recuperare un dropped stash in git

di Lorenzo Neri
102 visualizzazioni

Come si può recuperare un dropped stash in git? È quello che vedremo assieme in questo articolo, salvandoci da un grande problema di codice “sparito”!

Tra tutte le cose che ci mette a disposizione git c’è senza dubbio lo stash: uno strumento molto, ma molto comodo.

Può capitare però, come successe a me tempo fa con Visual Studio che feci una pull request e mi bruciò letteralmente uno stash.

Puff. 10 ore di lavoro andate in fumo.

Eppure, mi ricordai che c’era modo di agire e tentare di recuperare lo stash sparito, che in realtà sarebbe da dire “droppato” ovvero dropped.

Ma prima di cominciare, permettimi di presentarmi: il mio nome è Lorenzo Neri e sono un informatico. Mi occupo di realizzare contenuti per aiutare persone come te a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

Dicevo prima che feci un grande errore come del resto sono tutti gli articoli che trovi sul mio blog. Perché non raccogliere i vari errori che ho fatto nel corso della mia vita e crearne una serie di articoli per aiutare persone come te a trovare una soluzione?

Quindi, eccoci qui.

Prima però, facciamo una breve introduzione per capire come recuperare un dropped stash in git.

Che cos’è un dropped stash

Lo stash lavora come una pila: meglio dire come uno stack. Questo significa che il primo stash creato, sarà l’ultimo che verrà estratto.

Capita però, come nel mio caso, che delle volte gli stash creati possano essere “cancellati”.

Cancellati per sovrascritture, modifiche effettuate nel branch in cui sei attualmente “checkato”, per una pull request come nel mio caso… Ma hai notato una cosa?

Perché ho usato le virgolette? Perché non viene cancellato del tutto, ma finisce nel limbo.

Per “limbo” a dire il vero, intendo ciò che si può definire “dangling”, sospeso.

Git ha al suo interno un garbage collector: tutta quella serie di commit, stash e lavoro che è “rimasto in sospeso” nella staging area prima o poi viene eliminato.

Ma prima che venga eliminato… Possiamo appunto recuperare tutto questo, fra cui il famoso dropped stash.

Come recuperare il dropped stash

Gli stash, così come i commit hanno un proprio “hash”. Se fossi curioso ne ho parlato in questo articolo, comunque sia, se conosci l’hash dello stash che stai recuperando, puoi recuperarlo molto facilmente così:

git stash apply $hash_dello_stash

Tolto lo scioglilingua di prima, riconosco che non sia nemmeno lo scenario più comune: del resto chi cavolo si va a ricordare l’hash di uno stash?

Recuperiamo lo stash senza hash

Sì, lo so, ma era troppo bello non abusare di questo pseudo-scioglilingua 😀

C’è un comando poco usato che ci permette di recuperare tutti i dangling commit, fra cui anche il tuo dropped stash tanto agognato.

Ora che ci penso, di dangling commit, di cosa sono e tutto ciò che li riguarda, ne ho parlato qui in questo articolo.

Ah ok, sei tornato: ottimo! Proseguiamo!

Dicevo, il comando in questione è fsck e se stai usando Mac o una distribuzione Linux oppure Microsoft puoi usarlo così:

git fsck --no-reflog

Tra l’altro, lo sapevi che iscrivendoti alla mia newsletter puoi avere gratis una guida ai comandi da CLI per Windows, Mac e Linux? Promettimi che una volta iscritto tornerai a leggere l’articolo! 😉

Dicevamo: perchè usare il flag “–no-reflog”?

Beh perché se lanciassimo il comando senza di esso otterremmo sì i vari dangling commit, ma non vedremmo quelli letteralmente persi.

In che senso?

Per “letteralmente persi” intendo quei dangling commit che non sono associati in nessun modo ad alcun branch o stash: quelli letteralmente persi per intenderci, come quello che stai cercando di recuperare te.

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più