Setzen Sie alle Änderungen nach dem letzten Commit in Git zurück

323

Wie kann ich jede nach dem letzten Festschreiben an meinem Verzeichnis vorgenommene Änderung rückgängig machen , einschließlich des Löschens hinzugefügter Dateien, des Zurücksetzens geänderter Dateien und des Zurücksetzens gelöschter Dateien?

Dogbert
quelle
Mögliches Duplikat von Zurück zum vorherigen Git-Commit
Nawfal
7
@nawfal ist möglicherweise ein Duplikat, aber "Alle Änderungen nach dem letzten Festschreiben zurücksetzen" entspricht mehr Suchkriterien (in Google gesuchte Wörter) als das entsprechende "Zurücksetzen des Git-Repositorys". Zumindest für Leute wie mich, die kein Englisch als Muttersprache haben: d
Shirish Herwade

Antworten:

559

Setzen Sie zuerst die Änderungen zurück

git reset HEAD --hard

dann alles ungespurte ausräumen. Wenn Sie Dateien behalten möchten, die aufgrund von nicht verfolgt werden .gitignore, gehen Sie mit diesem Befehl vorsichtig vor.

git clean -fd
Benjamin Bannier
quelle
7
@Adam: Vielleicht möchten Sie manchmal auch die -xOption git clean, die es anweist , auch ignorierte Dateien zu entfernen.
Cascabel
29
Wenn Sie Dateien behalten möchten, die aufgrund von .gitignore nicht verfolgt werden, gehen Sie vorsichtig mit dem git clean -fdBefehl um.
Bitsoflogic
3
@ Levinaris: Umgekehrt git clean -fdwerden ignorierte Dateien nicht gelöscht. -xwerden.
Robert Siemer
5
@ RobertSiemer Eigentlich kann es! Wenn Sie Ordner haben, die vollständig aus ignorierten Dateien bestehen, werden diese Ordner entfernt, wodurch ignorierte Dateien gelöscht werden. Betrachten Sie eine Gitignore-Datei wie die hier gezeigte : stackoverflow.com/q/25554504/456645 . In diesem Beispiel wird davon ausgegangen, dass einige Ordner keine PHP-Dateien enthalten. git clean -fdlöscht diese Ordner und nicht verfolgten Dateien. Getestet mit Git Version 1.9.1
Bitsoflogic
2
@ RobertSiemer Ich habe diese Antwort gelesen, nachdem ich meine ignorierten Dateien verloren habe
Zerquix18
71

Wie kann ich jede nach dem letzten Festschreiben an meinem Verzeichnis vorgenommene Änderung rückgängig machen , einschließlich des Löschens hinzugefügter Dateien, des Zurücksetzens geänderter Dateien und des Zurücksetzens gelöschter Dateien?

  1. Sie können Änderungen an verfolgten Dateien rückgängig machen mit:

    git reset HEAD --hard
    
  2. Sie können nicht verfolgte Dateien entfernen mit:

    git clean -f
    
  3. Sie können nicht verfolgte Dateien und Verzeichnisse entfernen mit:

    git clean -fd
    

    Sie können Änderungen an nicht verfolgten Dateien jedoch nicht rückgängig machen .

  4. Sie können ignorierte und nicht verfolgte Dateien und Verzeichnisse entfernen

    git clean -fdx
    

    Sie können Änderungen an ignorierten Dateien jedoch nicht rückgängig machen .

Sie können auch festlegen , clean.requireForcezu false:

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

um die Verwendung von -f( --force) bei der Verwendung zu vermeiden git clean.

Ortomala Lokni
quelle
2
Super, genau das, was ich brauchte. Vielen Dank für den Vergleich aller relevanten Befehle!
Festzelt
-1

Es gibt zwei Befehle, die in dieser Situation funktionieren:

root> git reset --hard HEAD ~ 1

root> git push -f

Weitere Git-Befehle finden Sie auf dieser Seite

RKS
quelle
1
git push -fist nicht mit der Frage verbunden und in diesem Szenario gefährlich
Schnurrbart1up