Ho un progetto in cui ho eseguito git init
.
Dopo diversi commit, ho fatto git status
che mi ha detto che tutto era aggiornato e non c'erano modifiche locali.
Poi ho fatto diverse modifiche consecutive e mi sono reso conto che volevo buttare via tutto e tornare al mio stato originale. Questo comando lo farà per me?
git reset --hard HEAD
Se volete ripristinare le modifiche fatte alla vostra copia di lavoro, fate così:
git checkout .
Se vuoi ripristinare le modifiche fatte all'indice (cioè, che hai aggiunto tu), fai così. Attenzione: questo resetterà tutti i tuoi commit non spinti su master!:
git reset
Se vuoi ripristinare un cambiamento che hai commesso, fai così:
git revert <commit 1> <commit 2>
Se vuoi rimuovere i file non tracciati (ad esempio, nuovi file, file generati):
git clean -f
O directory non tracciate (ad esempio, directory nuove o generate automaticamente):
git clean -fd
Nota: si potrebbe anche voler eseguire
git clean -fd
come
git reset --hard
non rimuoverà i file non tracciati, mentre git-clean rimuoverà tutti i file dalla directory principale tracciata che non sono sotto tracciamento git. ATTENZIONE - FAI ATTENZIONE CON QUESTO! È utile eseguire prima una prova generale con git-clean, per vedere cosa cancellerà.
Questo è anche particolarmente utile quando ottieni il messaggio di errore
~"performing this command will cause an un-tracked file to be overwritten"
Che può verificarsi quando si fanno diverse cose, una delle quali è l'aggiornamento di una copia di lavoro quando tu e il tuo amico avete entrambi aggiunto un nuovo file con lo stesso nome, ma lui l'ha impegnato per primo nel controllo dei sorgenti, e a te non importa di cancellare la tua copia non tracciata.
In questa situazione, fare una prova secca vi aiuterà anche a mostrare una lista di file che verrebbero sovrascritti.
Guarda in git-reflog. Elencherà tutti gli stati che ricorda (l'impostazione predefinita è di 30 giorni), e puoi semplicemente fare il checkout di quello che vuoi. Per esempio:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d