772 Stimmen

Wie kann ich mein lokales Arbeitsverzeichnis in Git löschen?

Wie kann ich mein Arbeitsverzeichnis in Git löschen?

0 Stimmen

Interaktiver Ansatz: git clean -i -fd

11 Stimmen

Ich verstehe nicht, warum diese Frage so oft gestellt wurde. markiertes Duplikat . Diese andere Frage befasst sich eindeutig nur mit dem Entfernen untracked Dateien von working directory und nicht modified Dateien

0 Stimmen

@y2k-shubham Sicher, aber こん Frage ist vage und bezieht sich nicht ausdrücklich auf geänderte Dateien.

1165voto

dbr Punkte 158949

Zurücksetzen einer bestimmten Datei auf den Zustand der letzten Übergabe (um nicht übergebene Änderungen in einer bestimmten Datei zu verwerfen):

git checkout thefiletoreset.txt

Dies wird erwähnt in der git status Ausgabe:

(use "git checkout -- <file>..." to discard changes in working directory)

Um das gesamte Repository auf den Stand der letzten Übertragung zurückzusetzen:

git reset --hard

Um nicht verfolgte Dateien zu entfernen, lösche ich normalerweise einfach alle Dateien in der Arbeitskopie (aber no die .git/ Ordner!), dann tun Sie git reset --hard was zur Folge hat, dass es nur noch festgeschriebene Dateien gibt.

Eine bessere Möglichkeit ist die Verwendung von git clean ( Warnung : unter Verwendung der -x Flagge wie unten, wird Git dazu veranlassen, ignorierte Dateien zu löschen):

git clean -d -x -f

entfernt nicht verfolgte Dateien, einschließlich Verzeichnisse ( -d ) und von Git ignorierte Dateien ( -x ). Ersetzen Sie die -f Argument mit -n um einen Probelauf durchzuführen oder -i für den interaktiven Modus, und es wird Ihnen mitgeteilt, was entfernt werden soll.

Einschlägige Links:

28 Stimmen

Beachten Sie, dass "git clean -d" standardmäßig nicht ausreichend ist. Sie müssen auch die Option -f (force) hinzufügen. Wenn Sie zusätzlich die Dateien löschen wollen, die von .gitignore ignoriert werden, müssen Sie die Option -x hinzufügen. So sieht das Ganze aus: git clean -xdf

13 Stimmen

Beachten Sie jedoch, dass dieser Befehl auch Ihre lokale Sqlite-Datenbank löscht - und zwar nicht, um die letzten Änderungen rückgängig zu machen, sondern um sie tatsächlich zu löschen. Je nachdem, was Sie vorhaben, ist die Option "-x" möglicherweise keine gute Idee.

0 Stimmen

Ich bin mir 100%ig sicher, dass ich git clean -d -f (ohne -x) ausgeführt habe und es hat auch ignorierte Dateien gelöscht.

161voto

Marko Punkte 29192

使用する。

git clean -df

Es ist nicht gut beworben, aber git clean ist wirklich praktisch. Git Ready hat eine schöne Einführung in git clean .

34 Stimmen

Ich schlage vor, nicht die -x Parameter, da er alle gitignored Inhalte entfernt. Angenommen, Sie haben einen Ordner namens ' gitignored ' hinzugefügt zu .gitignore und Sie speichern dort Ihre Dateien, die sicher sein müssen, Sie löschen sie auch mit -x Parameter

3 Stimmen

Ups. git clean -xdf auch entfernt .gitignore und ich habe es vor der nächsten Übertragung nicht bemerkt. Ich werde nicht ignorieren .gitignore mehr. :)

4 Stimmen

@Grastveit git clean -xdf wird entfernt .gitignore wenn und nur wenn es nicht hinzugefügt wurde, also wie vorgesehen funktioniert.

51voto

dbn Punkte 11592

Alle bisherigen Antworten behalten lokale Übertragungen bei. Wenn Sie realmente ernsthaft, Sie können alle lokalen Übertragungen und alle lokalen Bearbeitungen verwerfen, indem Sie dies tun:

git reset --hard origin/branchname

Zum Beispiel:

git reset --hard origin/master

Dies macht Ihr lokales Repository genau übereinstimmen den Status des Ursprungs (außer bei nicht verfolgten Dateien).

Wenn Sie dies versehentlich getan haben, nachdem Sie nur den Befehl gelesen haben und nicht wissen, was er bewirkt :), verwenden Sie git reflog, um Ihre alten Übertragungen zu finden.

0 Stimmen

Ist der Name der Niederlassung wirklich erforderlich? Für mich git reset --hard funktioniert einfach für den aktuellen Arbeitszweig ohne Zweignamen.

1 Stimmen

Ohne den Zweig werden keine lokalen Übertragungen gelöscht.

0 Stimmen

Ohh. Ok. Meine Beobachtung bezog sich nur auf die lokal geänderten und neu hinzugefügten nicht verfolgten Dateien. Wenn ich Sie also richtig verstanden habe, wird eine Datei, die in den lokalen Zweig verschoben wurde (noch nicht gepusht), nicht bereinigt, wenn ich den Zweignamen nicht explizit verwende. Richtig?

15voto

Brent Bradburn Punkte 45995

Sie können eine Übergabe erstellen, die eine leere Arbeitskopie enthält.

Dies ist ein im Allgemeinen sicherer, nicht destruktiver Ansatz, da er keine Brute-Force-Reset-Mechanismen beinhaltet. Zuerst verstecken Sie alle verwalteten Inhalte mit git checkout empty dann können Sie alle nicht verwalteten Inhalte manuell überprüfen und entfernen.

## create a stand-alone, tagged, empty commit
true | git mktree | xargs git commit-tree | xargs git tag empty

## clear the working copy
git checkout empty

Ihre Arbeitskopie sollte nun frei von verwalteten Inhalten sein. Alles, was bleibt, sind nicht verwaltete Dateien und die .git Ordner selbst.

So füllen Sie Ihre Arbeitskopie neu auf...

git checkout master ## or whatever branch you will be using

Wenn Sie ein vorausschauender Mensch sind, könnten Sie Ihr Repository auf dem richtigen Fuß beginnen, indem Sie alles auf einem leeren Commit aufbauen...

git init
git commit --allow-empty --allow-empty-message -m ""
git tag empty
...

Es gibt verschiedene Verwendungsmöglichkeiten für einen markierten leeren Arbeitsbaum. Mein Favorit ist im Moment, die Wurzel unter einem Satz von git worktree Unterordner.

0 Stimmen

Dies kann auch eine gute Möglichkeit sein, Speicherplatz zu sparen, wenn es mal eng wird.

5 Stimmen

Eine viel schnellere Möglichkeit, die leere Kasse zu erstellen: true | git mktree | xargs git commit-tree | xargs git tag empty

2 Stimmen

Hinweis: Es scheint sich zu lohnen, einen leeren Commit als Basis für Projekte zu verwenden. Das macht es einfacher, ein komplettes Projekt zu rebasen, falls der ursprüngliche Commit korrigiert werden muss -- und kann die Dinge vereinfachen, wenn Ein bestehendes Git-Repository nach svn verschieben .

9voto

Tobias Punkte 2359

Um zu einem anderen Zweig zu wechseln und dabei alle nicht übertragenen Änderungen zu verwerfen (z. B. aufgrund der seltsamen Behandlung von Zeilenenden durch Git):

git checkout -f <branchname>

Ich hatte eine Arbeitskopie mit Hunderten von geänderten Dateien (aber leeren git diff --ignore-space-at-eol ), die ich mit keinem der Befehle, die ich hier gelesen habe, loswerden konnte, und git checkout <branchname> wird auch nicht funktionieren - es sei denn, man gibt die -f (oder --force ) Option.

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