Wie verwerfe ich Änderungen in meiner Arbeitskopie, die nicht im Index enthalten sind?
Dies scheint der kanonische Weg von Git zu sein, d.h. genau das, was Git Ihnen sagt, wenn Sie eingeben git status
Wie verwerfe ich Änderungen in meiner Arbeitskopie, die nicht im Index enthalten sind?
Für alle nicht bereitgestellten Dateien im aktuellen Arbeitsverzeichnis verwenden:
git checkout -- .
Für eine bestimmte Datei verwenden Sie:
git checkout -- path/to/file/to/revert
--
um Mehrdeutigkeiten zu beseitigen (dies ist bekannt als Disambiguierung von Argumenten ).
Für Git 2.23 aufwärts kann man die spezifischere
git restore .
bzw.
git restore path/to/file/to/revert
die zusammen mit git switch
ersetzt die überlastete git checkout
( siehe hier ), und damit entfällt das Argument Disambiguierung.
Dies scheint der kanonische Weg von Git zu sein, d.h. genau das, was Git Ihnen sagt, wenn Sie eingeben git status
Funktioniert nicht, wenn es nicht verfolgte Dateien gibt. Git sagt error: The following untracked working tree files would be overwritten by checkout: ...
.
Ich denke, es ist besser, git reset --hard zu verwenden, wenn Sie die Änderungen nicht verfolgen wollen
@KarimSamir: In der Frage wird speziell nach Änderungen gefragt, die nicht im Index . Die git reset
werden auch Änderungen im Index verworfen.
Das scheint die vollständige Lösung zu sein:
git clean -df
git checkout -- .
WARNUNG : während es ignorierte Dateien, die direkt in .gitignore erwähnt werden, nicht löscht, git clean -df
kann ignorierte Dateien löschen, die sich in Ordnern befinden .
git clean
entfernt alle nicht verfolgten Dateien und git checkout
löscht alle noch nicht eingepflegten Änderungen.
@dval Das liegt daran, dass mit dem ersten Befehl die nicht indizierten Dateien und mit dem zweiten Befehl die nicht verknüpften Änderungen (der indizierten Dateien) entfernt wurden. Wenn Sie also keine abgestuften Änderungen hatten, ist dies dasselbe wie das Zurücksetzen auf die letzte Übertragung mit git reset --hard
+1 Dies ist die RICHTIGE ANTWORT, da sie den Fall korrekt behandelt, dass einige Dateien sowohl die et nicht stufenweise Änderungen. Beachten Sie, dass diese Lösung die unstaged Änderungen DISCARDS; wenn Sie sie beibehalten wollen, sollten Sie @greg-hewgill 's Antwort von git stash save --keep-index
.
git checkout --
funktioniert nicht, wenn Sie nur einen Zweig haben. git checkout .
funktioniert immer.
Ich danke Ihnen vielmals! Endlich eine Antwort, die IMMER funktioniert! Dies kann kombiniert werden mit git clean
um auch nicht verfolgte Dateien zu entfernen.
git clean -df
Bereinigt den Arbeitsbaum durch rekursives Entfernen von Dateien, die nicht unter Versionskontrolle stehen, beginnend mit dem aktuellen Verzeichnis.
-d
: Entfernen Sie nicht verfolgte Verzeichnisse zusätzlich zu den nicht verfolgten Dateien
-f
: Erzwingen (möglicherweise nicht notwendig, je nach clean.requireForce
Einstellung)
ausführen. git help clean
um das Handbuch zu sehen
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Siehe auch stackoverflow.com/questions/22620393/
16 Stimmen
git-clean
entfernt nur die nicht verfolgten Dateien aus dem Arbeitsbaum git-scm.com/docs/git-clean37 Stimmen
Um den obigen Kommentar von Asenar zu verdeutlichen,
git-clean -df
kann gefährlich sein. Es löscht lokale, nicht verfolgte Dateien (z. B. solche, die durch eine .gitignore-Datei abgedeckt sind). Lesen Sie die folgenden Hinweise sorgfältig durch und erwägen Sie stattdessen git checkout .26 Stimmen
'git clean -df ' Seien Sie gewarnt! Ich habe das ausprobiert und wichtige Ordner verloren, die nicht wiederhergestellt werden können... Autsch!
73 Stimmen
Unter
git status
macht einen Vorschlag, wie man das machen kann!git checkout -- .
0 Stimmen
Git gui hat eine Funktion, mit der Änderungen sicher rückgängig gemacht werden können. .gitignore wird von diesem Programm beachtet, während git-clean es überhaupt nicht verwendet.
0 Stimmen
@Readonly Ich denke, die Frage sollte lauten: "Wie verwerfe ich nicht bereitgestellte Änderungen im Arbeitsbaum?
git reset HEAD file1
das überschreibtfile1
vom letzten Commit in der Commit-Historie zum Staging-Bereich.28 Stimmen
@Paulo: ab Juli 2019,
git status
gibt die Anregung:git restore
.git restore
ist ein neuer Befehl genau für diesen Zweck. Siehe mein Update 2019 .2 Stimmen
Ich denke, dass entweder die Frage oder der Titel geändert werden sollte. Der Titel stimmt nicht mit der gestellten Frage überein, und es ist nicht klar, ob die Antworten beides abdecken.
0 Stimmen
Wahrscheinlich ist es nicht das, was Sie suchen, aber wenn Sie die GitHub Desktop App verwenden, gibt es natürlich einen Menüpunkt, um dies zu tun. Zweig -> Alle Änderungen verwerfen