Wie kann ich alle lokalen Änderungen in einem mit Git verwalteten Projekt auf den vorherigen Zustand zurücksetzen?

Ich habe ein Projekt, bei dem ich git init ausgeführt habe. Nach mehreren Übertragungen führte ich git status aus, das mir sagte, dass alles auf dem neuesten Stand war und es keine lokalen Änderungen gab.

Dann habe ich mehrere aufeinanderfolgende Änderungen vorgenommen und festgestellt, dass ich alles wegwerfen und zu meinem ursprünglichen Zustand zurückkehren möchte. Wird dieser Befehl das für mich tun?

git reset --hard HEAD
Lösung

Wenn Sie Änderungen an Ihrer Arbeitskopie rückgängig machen wollen, tun Sie dies:

git checkout .

Wenn Sie Änderungen am Index rückgängig machen wollen (d.h. Änderungen, die Sie hinzugefügt haben), tun Sie dies. Warnung: Dies wird alle Ihre nicht gepushten Commits auf Master zurücksetzen!:

git reset

Wenn Sie eine Änderung rückgängig machen wollen, die Sie selbst vorgenommen haben, tun Sie dies:

git revert  

Wenn Sie nicht verfolgte Dateien entfernen wollen (z.B. neue Dateien, generierte Dateien):

git clean -f

Oder nicht verfolgte Verzeichnisse (z. B. neue oder automatisch erzeugte Verzeichnisse):

git clean -fd
Kommentare (19)

Hinweis: Sie können auch Folgendes ausführen

git clean -fd

als

git reset --hard

nicht verfolgte Dateien nicht entfernt, während git-clean alle Dateien aus dem verfolgten Stammverzeichnis entfernt, die nicht unter Git-Tracking stehen. WARNUNG - SEIEN SIE VORSICHTIG! Es ist hilfreich, zuerst einen Probelauf mit git-clean durchzuführen, um zu sehen, was gelöscht wird.

Dies ist auch besonders nützlich, wenn Sie die Fehlermeldung erhalten

~"performing this command will cause an un-tracked file to be overwritten"

Das kann bei verschiedenen Dingen auftreten, z.B. beim Aktualisieren einer Arbeitskopie, wenn Sie und Ihr Freund eine neue Datei mit demselben Namen hinzugefügt haben, aber er sie zuerst in die Versionskontrolle übertragen hat und Sie sich nicht darum kümmern, Ihre nicht verfolgte Kopie zu löschen.

In dieser Situation hilft Ihnen ein Probelauf, der Ihnen eine Liste der Dateien zeigt, die überschrieben werden würden.

Kommentare (4)

Schauen Sie sich git-reflog an. Es listet alle Zustände auf, die es sich merkt (Standard ist 30 Tage), und Sie können einfach den gewünschten auschecken. Zum Beispiel:

$ 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
Kommentare (4)