6291 Stimmen

Wie verwerfe ich nicht bereitgestellte Änderungen in Git?

Wie verwerfe ich Änderungen in meiner Arbeitskopie, die nicht im Index enthalten sind?

0 Stimmen

16 Stimmen

git-clean entfernt nur die nicht verfolgten Dateien aus dem Arbeitsbaum git-scm.com/docs/git-clean

37 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 .

7237voto

Tobi Punkte 71004

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.

150 Stimmen

Dies scheint der kanonische Weg von Git zu sein, d.h. genau das, was Git Ihnen sagt, wenn Sie eingeben git status

40 Stimmen

Funktioniert nicht, wenn es nicht verfolgte Dateien gibt. Git sagt error: The following untracked working tree files would be overwritten by checkout: ... .

114 Stimmen

Neuling Frage, was bedeutet "git checkout -- ." semantisch?

3148voto

Greg Hewgill Punkte 882617

Ein anderer, schnellerer Weg ist:

git stash save --keep-index --include-untracked

Sie müssen nicht enthalten --include-untracked wenn Sie es nicht so genau nehmen wollen.

Danach können Sie das Versteck mit einer git stash drop Befehl, wenn Sie möchten.

0 Stimmen

Ich denke, es ist besser, git reset --hard zu verwenden, wenn Sie die Änderungen nicht verfolgen wollen

13 Stimmen

@KarimSamir: In der Frage wird speziell nach Änderungen gefragt, die nicht im Index . Die git reset werden auch Änderungen im Index verworfen.

173 Stimmen

Git checkout -- . ist viel schneller

2288voto

Mariusz Nowak Punkte 30152

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.

158 Stimmen

Die beiden anderen Antworten funktionieren nicht wirklich, diese schon.

2 Stimmen

Aus irgendeinem Grund wurde die vorherige Übertragung rückgängig gemacht

20 Stimmen

@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

403voto

CB Bailey Punkte 693084

Dies prüft den aktuellen Index für das aktuelle Verzeichnis und verwirft alle Änderungen in Dateien ab dem aktuellen Verzeichnis abwärts.

git checkout .

oder dieses, das alle Dateien aus dem Index auscheckt und dabei die Dateien des Arbeitsbaums überschreibt.

git checkout-index -a -f

22 Stimmen

+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 .

0 Stimmen

git checkout -- funktioniert nicht, wenn Sie nur einen Zweig haben. git checkout . funktioniert immer.

0 Stimmen

Ich danke Ihnen vielmals! Endlich eine Antwort, die IMMER funktioniert! Dies kann kombiniert werden mit git clean um auch nicht verfolgte Dateien zu entfernen.

308voto

E Ciotti Punkte 4510
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

0 Stimmen

Warum hat diese Antwort nicht alle Stimmen? Sie wurde bereits 2011 beantwortet und ist immer noch richtig.

0 Stimmen

Dies sollte die akzeptierte Antwort sein.

CodeJaeger.com

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.

Powered by:

X