Annulla eliminare in git
-
13-11-2019 - |
Domanda
Ho fatto qualcosa di molto stupido. Ho effettuato un commit utilizzando Git Commit (file di file + nuovi file) (c). Poi ho fatto modificare l'ultimo commit. Quindi ho eliminato tutti i file in modo ricorsivo (!) Usando git rm -r
Poi ho fatto un altro commit git (c).
A-B-C ↑ master
Esiste un modo per scalare i file ma mantenere le modifiche che ho avuto nel mio primo commit? (C) Preferirei non tornare a (b). Ho provato a reset git -soft head^, quindi lo stato Git elenca i file che ho eliminato, poi ho fatto il checkout Git, ma ancora senza fortuna. Non so nemmeno se è possibile.
Soluzione
Fatti un favore e non farlo git checkout <hash>
Come suggerisce l'altra risposta e rischia di più problemi.
Se hai eliminato il file dalla tua directory di lavoro e non hai ancora commesso le modifiche, fai:
git checkout -f
ATTENZIONE: commetti file non impegnati prima di eseguire questo comando, altrimenti li perderai tutti
I file eliminati dovrebbero essere tornati.
In caso contrario e se riesci a trovare il commit che desideri (c, ecc. - la tua domanda non è chiara) git reflog
, basta fare git reset --hard <hash from reflog>
E dovresti essere tutto pronto.
Altri suggerimenti
Se ti ho capito correttamente riscrivi il commit C. Quindi il commit originale, chiamiamolo C1 non è accessibile dal tuo grafico di commit, ma è ancora lì (Git mantiene tutti i commit per un po '). Uso git reflog
Per ottenere il commit hash e git checkout <hash>
o un altro comando appropriato per raggiungere il vecchio stato C1.