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 .

219voto

prosoitos Punkte 5811

Aktualisierung 2019

Sie können jetzt nicht bereitgestellte Änderungen in eine verfolgte Datei mit:

git restore <file>

und in alle verfolgten Dateien im aktuellen Verzeichnis (rekursiv) mit:

git restore .

Wenn Sie Letzteres vom Stamm des Projektarchivs aus ausführen, werden nicht vertagte Änderungen in allen verfolgten Dateien des Projekts verworfen.

Anmerkungen

  • git restore wurde eingeführt in Juli 2019 und in Version 2.23 als Teil einer Aufspaltung des git checkout Befehl in git restore für Dateien und git switch für Zweige.
  • git checkout verhält sich immer noch wie früher, und die älteren Antworten sind weiterhin gültig.
  • Bei der Ausführung git status mit unstaged Änderungen im Arbeitsbaum, dies ist nun das, was Git vorschlägt, um sie zu verwerfen (anstelle von git checkout -- <file> wie es vor v2.23 der Fall war).
  • Wie bei git checkout -- . werden nur Änderungen in verfolgten Dateien verworfen. Also Antwort von Mariusz Nowak immer noch gilt, und wenn Sie alle nicht vertagten Änderungen, einschließlich nicht verfolgter Dateien, verwerfen wollen, könnten Sie, wie er vorschlägt, eine zusätzliche git clean -df .

3 Stimmen

Ich wollte nur meine nicht vorgenommenen Änderungen rückgängig machen, ohne neu hinzugefügte Dateien zu beeinträchtigen. git restore . funktionierte perfekt. Danke.

4 Stimmen

Ich habe git restore <filename> und es hat perfekt funktioniert.

1 Stimmen

Bei mir hat es gut funktioniert.

129voto

Ben Punkte 7597

Mein Favorit ist

git checkout -p

So können Sie selektiv Teile zurücksetzen.

Siehe auch:

git add -p

14 Stimmen

Ich finde es toll, dass man die tatsächliche Änderung sehen kann, bevor sie verworfen wird.

0 Stimmen

Ich verwende Folgendes: git checkout -p und dann "a", um alle zu akzeptieren.

3 Stimmen

Ich habe nie darüber nachgedacht. Das -p bietet eine zusätzliche Sicherheitsschicht. Kombinieren Sie es mit git clean -d um tatsächlich auf OP zu antworten.

127voto

Martin G Punkte 15799

Da keine Antwort die genaue Kombination der Optionen vorschlägt, die ich verwende, hier ist sie:

git clean -dxn .  # dry-run to inspect the list of files-to-be-removed
git clean -dxf .  # REMOVE ignored/untracked files (in the current directory)
git checkout -- . # ERASE changes in tracked files (in the current directory)

Dies ist der Online-Hilfetext für das verwendete git clean Optionen:

-d

Entfernen Sie nicht verfolgte Verzeichnisse zusätzlich zu nicht verfolgten Dateien. Wenn ein nicht verfolgtes Verzeichnis von einem anderen Git-Repository verwaltet wird, wird es standardmäßig nicht entfernt. verwenden -f Option zweimal, wenn Sie ein solches Verzeichnis wirklich entfernen wollen.

-x

Verwenden Sie nicht die Standard-Ignorierregeln, die aus .gitignore (pro Verzeichnis) und $GIT_DIR/info/exclude , aber verwenden Sie trotzdem die Ignorierregeln, die mit -e Optionen. Dies ermöglicht das Entfernen aller nicht verfolgten Dateien, einschließlich der Build-Produkte. Dies kann verwendet werden (möglicherweise in Verbindung mit git reset ), um ein unverfälschtes Arbeitsverzeichnis zum Testen eines sauberen Builds zu erstellen.

-n

Entfernen Sie nicht wirklich etwas, sondern zeigen Sie nur, was gemacht werden würde.

-f

Wenn die Git-Konfigurationsvariable clean.requireForce ist nicht auf false wird sich Git clean weigern, Dateien oder Verzeichnisse zu löschen, es sei denn, es wird -f , -n , oder -i . Git verweigert das Löschen von Verzeichnissen innerhalb der .git Unterverzeichnis oder Datei, es sei denn, ein zweites -f gegeben ist.

0 Stimmen

+1 für diese Lösung. In Bezug auf Ihre Bemerkung, dass "git checkout . muss in der Root des Repos durchgeführt werden", vielleicht könnten Sie erwähnen, wir können einfach tun git reset --hard stattdessen? (was eigentlich gleichbedeutend ist mit git reset --hard HEAD und sollte unabhängig vom aktuellen Verzeichnis funktionieren...)

2 Stimmen

Auch in Bezug auf den ersten Befehl git clean -dfx Um auf Nummer sicher zu gehen, habe ich einen Tipp: Führen Sie einfach git clean -d -x -n um die Liste der zu löschenden Dateien anzuzeigen, und bestätigen Sie den Vorgang durch Ausführen von git clean -d -x -f (Ich habe das Argument -n bzw. -f um sie am Ende schnell in einem Terminal ändern zu können)

6 Stimmen

Beachten Sie bitte, dass dies nicht rückgängig gemacht werden kann, und wenn Sie Dateien in .gitignore werden Sie sie verlieren. Sichern Sie Ihr Projekt also vorher.

86voto

2540625 Punkte 10058

Wenn Sie lediglich wünschen um Änderungen an bestehenden Dateien zu entfernen verwenden checkout ( hier dokumentiert ).

git checkout -- .
  • Es ist keine Verzweigung angegeben, also wird die aktuelle Verzweigung überprüft.
  • Der Doppel-Bindestrich ( -- ) sagt Git, dass das, was folgt, als sein zweites Argument (Pfad) genommen werden soll, dass Sie die Angabe eines Zweigs übersprungen haben.
  • Der Zeitraum ( . ) zeigt alle Pfade an.

Wenn Sie wollen um hinzugefügte Dateien zu entfernen seit Ihrer letzten Übertragung, verwenden Sie clean ( hier dokumentiert ):

git clean -i 
  • El -i initiiert eine interaktive clean um versehentliche Löschungen zu verhindern.
  • Für eine schnellere Ausführung stehen eine Handvoll anderer Optionen zur Verfügung; siehe die Dokumentation.

Wenn Sie es wünschen um Änderungen für den späteren Zugriff in einen Speicherplatz zu verschieben verwenden stash ( hier dokumentiert ):

git stash
  • Alle Änderungen werden in den Stash von Git verschoben, um später darauf zugreifen zu können.
  • Es gibt eine Handvoll Optionen für ein differenzierteres Verstecken; siehe die Dokumentation.

0 Stimmen

T

68voto

Forhadul Islam Punkte 1311

Am einfachsten geht das mit diesem Befehl:

Dieser Befehl wird verwendet, um Änderungen im Arbeitsverzeichnis zu verwerfen -

git checkout -- .

https://git-scm.com/docs/git-checkout

Im Git-Befehl wird das Verstecken von nicht verfolgten Dateien durch die Verwendung erreicht:

git stash -u

http://git-scm.com/docs/git-stash

23 Stimmen

Zweimal bin ich hierher gekommen, habe diese Antwort gelesen und dann vergessen, die . am Ende. Für mein zukünftiges Ich: der Punkt ist Wesentlich ¡!

3 Stimmen

Ich musste alle lokalen Änderungen in einem Unterverzeichnis loswerden, ohne alle anderen Änderungen zu zerstören. Diese Antwort hat mir sehr geholfen, danke

2 Stimmen

Bitte beschreiben Sie, was die beiden Befehle bewirken. Es ist wirklich nicht hilfreich, keine Erklärung zu haben.

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