Incidentalmente ripristinato il master, ho perso le modifiche non eseguite

Sono riuscito a fare un grosso errore (un lunedì mattina) lavorando su Master, dimentico di creare un nuovo ramo, ho apportato modifiche ai file e inavvertitamente ho ripristinato il master, perdendo tutti gli aggiornamenti. Non ho impegnato i file aggiornati.

Ho perso tutti gli aggiornamenti o posso recuperarli?

Non chiedermi come mai, perché ogni volta che ci penso devo darmi un pugno in faccia.

Se non hai commesso , messo in scena o nascosto le modifiche apportate, non è ansible ripristinare tali modifiche.

EDIT: recupero delle modifiche perse. Aggiungendo questo sul suggerimento di Mark Longair (nel commento). Questo include anche un paio di link SO dalla sua risposta qui sotto (*), che ho trovato abbastanza istruttivo.

  • Se hai mai commesso alcune modifiche e hai perso quel commit (come il commit in uno stato di distacco), puoi trovare che commit usando reflog . Vedi questa domanda SO *.

  • Se hai perso l’ultima tappa modificata, puoi recuperarla. Vedi questa domanda SO *. (Non l’ho mai usato o provato da solo).

  • Se hai nascosto una modifica, puoi recuperarla usando pop o apply . (Non sono sicuro che anche gli stacks saltati / rimossi possano essere recuperati e che non siano stati commessi). Potresti trovare utile Recuperare la scorta abbandonata in git .

Se ci sono altri metodi che chiunque può suggerire, modificherei ulteriormente questa risposta per aggiungerli.

Due longshots: alcuni IDE, come Delphi, mantengono una cronologia dell’editor. Potresti avere qualche ricorso lì.
Successivamente, se la cartella di lavoro locale si trova nella cartella MyDocuments, potrebbe essere stata automaticamente sottoposta a backup da Windows Home Server, Carbonite, MozyPro, ecc. Di solito sono “imposta e dimentica”. forse l’hai dimenticato?

Ero bloccato nella stessa situazione.

Aveva una lista dei file modificati nel terminale prima del reset –hard, andava nel mio editor (Sublime 2, non importa però), apriva ogni file e premeva cmd + z (annulla) una volta, questo effettivamente scioglieva le modifiche fatto dal hard reset e ho ottenuto le mie modifiche senza commit di nuovo 🙂

La domanda cruciale qui è ciò che hai fatto dopo aver apportato modifiche ai file. Se hai creato un commit che conteneva il nuovo stato dei file, dovresti essere in grado di recuperarli guardando le voci recenti in git reflog , trovando SHA1sum del commit e quindi creando un nuovo ramo da quello con git branch recovered o simile. C’è un esempio di fare questo in questa risposta .

Se hai git add su uno qualsiasi dei file per metterli in scena, dovresti anche essere in grado di recuperarli, ma questo è un po ‘più di lavoro – Jakub descrive come farlo in questa risposta .

Se ti capita di fare un git stash per darti uno stato pulito, allora ovviamente puoi riprenderlo come faresti con qualsiasi altra scorta.

Altrimenti temo che le notizie non siano buone.

Spero che non sia esasperante farlo notare post-hoc, ma per tornare al ramo master , non dovresti aver bisogno di usare alcun comando che potrebbe farti perdere dati – il git checkout master avrebbe detto che eri già sul ramo principale e mostra eventuali modifiche non salvate. (Probabilmente git reset --hard dovrebbe avere una conferma “Sì, voglio dire davvero” se ci sono cambiamenti non accettati, data la frequenza con cui le persone ^W perdo i dati in questo modo.)

Usa il reflog. git reflog ti mostrerà una cronologia di tutti i commit su cui sei stato, in ordine cronologico.

Se hai perso le tue modifiche con ‘check out master’, allora probabilmente stavi lavorando senza testa. git status ti dirà se stai lavorando senza una testa. (Come fa il git branch ).

Lavorare senza testa non è poi così male (lo faccio sempre, volutamente), ma avrai una maggiore fiducia nel reflog.

Se non hai comunque commesso le tue modifiche, in ogni caso, non c’è modo di recuperare quei file. L’unico modo realistico in cui ciò potrebbe accadere è se hai fatto un hard reset, o forzato esplicitamente un checkout. Non forzare le modifiche a meno che tu non sia sicuro di sentirti a tuo agio con la perdita di dati.

Di solito, in git, ‘forzare’ è fatto specificando -f .

Ho fatto la stessa cosa, più di una volta, sfortunatamente. Senza commettere nulla, Git non ha idea di cosa tu abbia scritto. Anche se l’hai commesso, quando sono arretrato non sono sicuro che il riflesso sarebbe d’aiuto.