Ripristina tutte le modifiche dopo l'ultimo commit in git


324

Come posso annullare tutte le modifiche apportate alla mia directory dopo l'ultimo commit, inclusa l'eliminazione di file aggiunti, il ripristino di file modificati e l'aggiunta di file cancellati?



8
@nawfal può essere un duplicato, ma "ripristina tutte le modifiche dopo l'ultimo commit" corrisponde a più criteri di ricerca (parole cercate in google) rispetto al corrispondente "come ripristinare il repository git". Almeno per le persone come me che non hanno l'inglese come lingua madre: d
Shirish Herwade

Risposte:


561

Ripristina innanzitutto le modifiche

git reset HEAD --hard

quindi ripulire tutto senza traccia. Se si desidera mantenere i file che non vengono tracciati a causa .gitignore, fare attenzione con questo comando.

git clean -fd

7
@Adam: a volte potresti volere anche l' -xopzione git clean, che lo dirige a rimuovere anche i file ignorati.
Cascabel,

31
Se si desidera mantenere i file che non vengono tracciati a causa di .gitignore, fare attenzione con il git clean -fdcomando.
bitsoflogic,

3
@Levinaris: viceversa git clean -fd, non verranno eliminati i file ignorati. -xvolere.
Robert Siemer,

5
@RobertSiemer In realtà, può! Se si dispone di cartelle composte interamente da file ignorati, verranno rimosse tali cartelle eliminando così i file ignorati. Prendi in considerazione un file .gitignore come quello qui: stackoverflow.com/q/25554504/456645 . In questo esempio, supponiamo che alcune cartelle non abbiano file PHP. git clean -fdeliminerà quelle cartelle e file non tracciati. Testato con la versione 1.9.1 di git
bitsoflogic il

3
ma perché la seconda "pulizia" era necessaria?
Shirish Herwade,

71

Come posso annullare tutte le modifiche apportate alla mia directory dopo l'ultimo commit, inclusa l'eliminazione di file aggiunti, il ripristino di file modificati e l'aggiunta di file cancellati?

  1. Puoi annullare le modifiche ai file tracciati con:

    git reset HEAD --hard
    
  2. Puoi rimuovere i file non tracciati con:

    git clean -f
    
  3. Puoi rimuovere file e directory non tracciati con:

    git clean -fd
    

    ma non puoi annullare la modifica a file non tracciati .

  4. È possibile rimuovere file e directory ignorati e non tracciati

    git clean -fdx
    

    ma non puoi annullare la modifica ai file ignorati .

Puoi anche impostare clean.requireForcesu false:

git config --global --add clean.requireForce false

per evitare di usare -f( --force) quando si usa git clean.


2
Fantastico, proprio quello di cui avevo bisogno. Grazie per il confronto di tutti i comandi rilevanti!
Marquee,

-1

Esistono due comandi che funzioneranno in questa situazione,

root> git reset --hard HEAD ~ 1

root> git push -f

Per ulteriori comandi git, consultare questa pagina


1
git push -fnon è correlato alla domanda e, in questo scenario, è pericoloso
mustache1up
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.