1365 Stimmen

git: alle Änderungen im Arbeitsverzeichnis einschließlich neuer Dateien rückgängig machen

Wie lösche ich alle Änderungen im Arbeitsverzeichnis, einschließlich neuer, nicht verfolgter Dateien? Ich weiß, dass git checkout -f tut das, aber es löscht keine neuen, nicht verfolgten Dateien, die seit der letzten Übertragung erstellt wurden.

Hat jemand eine Idee, wie man das machen kann?

1 Stimmen

@Joel & Wayfarer: warum versuchst du nicht git help reset y git help clean

3 Stimmen

Es ist eine gute Idee, dafür einen Alias in der Git-Konfiguration anzulegen ;)

1982voto

git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

Um zu sehen, was gelöscht wird, ohne es tatsächlich zu löschen, verwenden Sie die -n Flagge (dies ist im Grunde ein Testlauf). Wenn Sie bereit sind, tatsächlich zu löschen, entfernen Sie das -n Flagge:

git clean -nfd

17 Stimmen

Hinweis: git reset --hard entfernt sowohl die Änderungen in den Stages als auch die Änderungen im Arbeitsverzeichnis. Außerdem ist git clean -f -d wahrscheinlich das bessere Gegenteil vom Hinzufügen einer neuen, nicht verfolgten Datei. Aus der Frage geht hervor, dass der Fragesteller mit der aktuellen Anzahl der ignorierten Dateien zufrieden ist.

7 Stimmen

Lesen Sie die nächste Antwort und achten Sie auf den Schalter -x. (Es könnte auch Ihre lokalen Konfigurationsdateien entfernen, wie z.B. password/db-settings. z.B. database.yml)

10 Stimmen

Der Schalter -x ist in diesem Fall unnötig und etwas gefährlich.

422voto

Heath Dutton Punkte 3812

Die sicherste Methode, die ich häufig anwende:

git clean -fd

Syntaxerläuterung gemäß /docs/git-clean Seite:

  • -f (alias: --force ). Wenn die Git-Konfigurationsvariable clean.requireForce nicht auf false gesetzt ist, weigert sich git clean, Dateien oder Verzeichnisse zu löschen, wenn nicht -f, -n oder -i angegeben wird. Git verweigert das Löschen von Verzeichnissen mit .git-Unterverzeichnis oder -Datei, wenn nicht ein zweites -f angegeben wird.
  • -d . Entfernen Sie nicht verfolgte Verzeichnisse zusätzlich zu den nicht verfolgten Dateien. Wenn ein nicht verfolgtes Verzeichnis von einem anderen Git-Repository verwaltet wird, wird es standardmäßig nicht entfernt. Verwenden Sie die Option -f zweimal, wenn Sie ein solches Verzeichnis wirklich entfernen möchten.

Wie in den Kommentaren erwähnt, könnte es besser sein, eine git clean -nd die einen Trockenlauf durchführt und Ihnen sagt, was gelöscht werden würde, bevor es tatsächlich gelöscht wird.

Link zu git clean Dokumentseite: https://git-scm.com/docs/git-clean

150 Stimmen

Ich habe immer git clean -nd . vor dem eigentlichen Löschen von Dateien mit git clean -fd .

15 Stimmen

Und warum? Können Sie das bitte im Detail erklären?

35 Stimmen

Per Korkenzieher Die Option -n ist eigentlich ein Trockenlauf, der nichts entfernt, sondern nur zeigt, was gemacht wird.

257voto

jfountain Punkte 3507

Für alle verfolgten nicht inszeniert Dateien verwenden:

git checkout -- .

El . am Ende ist wichtig.

Sie können ersetzen . mit dem Namen eines Unterverzeichnisses, um nur ein bestimmtes Unterverzeichnis Ihres Projekts zu löschen. Das Problem wird speziell angesprochen aquí .

11 Stimmen

@Vincent: Das -- vermeidet Tippfehler, indem es dem Checkout-Befehl mitteilt, dass keine weiteren Parameter angegeben werden. Ohne sie könnten Sie mit einem neuen Zweig enden, anstatt den aktuellen zurückzusetzen!

7 Stimmen

Dies ist der sicherste Weg, allerdings werden dabei nicht verfolgte Dateien (neu hinzugefügte Dateien) nicht entfernt.

10 Stimmen

Gelöschte, aber noch nicht übertragene Dateien können nicht wiederhergestellt werden.

69voto

Gerard de Visser Punkte 6810

Sie können dies in zwei Schritten tun:

  1. Geänderte Dateien rückgängig machen: git checkout -f
  2. Entfernen Sie nicht verfolgte Dateien: git clean -fd

7 Stimmen

+1 weil einfach. Auch, weil es funktioniert und tut genau das, was OP will, ohne sie mit omg dies wird alles löschen abschrecken.

62voto

Greg Hewgill Punkte 882617

Werfen Sie einen Blick auf die git clean Befehl.

git-clean - Entfernt nicht verfolgte Dateien aus dem Arbeitsbaum

Bereinigt den Arbeitsbaum durch rekursives Entfernen von Dateien, die nicht unter Versionskontrolle stehen, beginnend mit dem aktuellen Verzeichnis.

Normalerweise werden nur Dateien entfernt, die Git unbekannt sind, aber wenn die Option -x angegeben ist, werden auch ignorierte Dateien entfernt. Dies kann zum Beispiel nützlich sein, um alle Build-Produkte zu entfernen.

0 Stimmen

Ich habe versucht git clean -i und wählen Sie "bereinigen" aus dem Menü - dadurch werden neue Dateien endgültig entfernt.

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