Ho perso l'ultimo commit perché ho eseguito accidentalmente "git reset --hard HEAD ^". Nota: non volevo mettere il "^" alla fine.Lost Last Git Commit
C'è un modo per riaverlo? E 'stato 2 giorni di lavoro :(
Ho perso l'ultimo commit perché ho eseguito accidentalmente "git reset --hard HEAD ^". Nota: non volevo mettere il "^" alla fine.Lost Last Git Commit
C'è un modo per riaverlo? E 'stato 2 giorni di lavoro :(
Penso che this article è quello che state cercando Secondo l'articolo, il vostro commettere è "andato", ma non garbage collection - un po 'come il cestino in Windows
si esegue git fsck --lost-found
. per trovare il "dangling commit" e guardarlo con git reflog
, quindi unire il commit penzolante con il ramo corrente, git merge 7c61179
.
Grazie. Questo è stato. Sapevo che era solo in giro in qualche posto, scollegato dal ramo. –
In combinazione con difftool, ho risolto il problema "lost commit": git fsck --lost-found (gli hash di commit penzolanti sono visualizzati) git difftool Qualcuno_HASH somefolder/(Ho provato tutti i commit penzoloni, fino a quando ho trovato quello necessario) –
Se si conosce l'ID commit (ad esempio scorrere indietro sul vostro terminale o utilizzare git reflog
),
git reset --hard 61567de5d9
Dove 61567de5d9 sono le prime cifre del più recente (perduto) commit ..
git rende davvero facile tornare a uno stato precedente e lavora molto duramente per evitare di perdere i dati che hai commesso. È per questa ragione che dovresti impegnarti spesso. Ho un comando git trash
che esegue lo stato git reset --hard
, ma dopo aver scritto un commit in modo da poter annullare il ripristino completo se necessario.
Per lo stato più recente (vale a dire il tuo caso esatto), basta fare git reset --hard ORIG_HEAD
per annullare ciò che hai appena fatto.
Si può fare una volta a base di azzerare: git reset --hard '@{5 minutes ago}'
di mettere se stessi in uno stato precedente in base al tempo (ci sono un sacco di opzioni che è possibile utilizzare, ad esempio, git reset --hard '@{yesterday}'
far finta di oggi non è mai avvenuto).
Altrimenti, sfogliare il git reflog
uscita per trovare la cosa prima che l'azione si sente di mettere in cattivo stato e ripristinare a questo.
Più generale puoi usare '@ {1}', o 'HEAD @ {1}' invece di 'ORIG_HEAD'. –
In ogni caso, NON utilizzare git gc. Ciò rimuoverà i commit non collegati in modo permanente. – Tronic
No, gc * non * perderà il commit a meno che non ti sia impedito di fare in modo che Git dimentichi i tuoi commit (disabilitazione o eliminazione aggressiva). Chiunque abbia speso abbastanza tempo per imparare come configurare git per perdere il proprio commit più recente dovrebbe almeno sapere di non fare la domanda. – Dustin
'git gc' per impostazione predefinita non rimuove i commit non collegati se sono in reflog fino a 30 giorni nel caso di commit non referenziati (di default). –