Frage git: Alle Änderungen am Arbeitsverzeichnis einschließlich neuer Dateien rückgängig machen


So löschen Sie alle Änderungen aus dem Arbeitsverzeichnis einschließlich neuer nicht verdeckter Dateien ich weiß das git checkout -f tut das, aber es löscht nicht neue, nicht nachverfolgte Dateien, die seit dem letzten Commit erstellt wurden.

Hat jemand eine Idee, wie man das macht?


931
2017-07-07 04:07


Ursprung


Antworten:


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)

1398
2017-07-07 04:09



Sicherste Methode, die ich häufig benutze:

git clean -fd

223
2018-04-18 16:15



Für alle ungetragen Dateien verwenden:

git checkout -- .

Das . Am Ende ist es wichtig.

Sie können ersetzen . mit einem Unterverzeichnisnamen, um nur ein bestimmtes Unterverzeichnis Ihres Projekts zu löschen. Das Problem wird speziell angesprochen Hier.


161
2017-09-26 15:29



Sieh dir die. An git clean Befehl.

git-clean - Entferne nicht verfolgte Dateien aus dem Arbeitsbaum

Bereinigt den Arbeitsbaum, indem rekursiv Dateien entfernt werden, die nicht der Versionskontrolle unterliegen, beginnend mit dem aktuellen Verzeichnis.

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


57
2017-07-07 04:09



Die folgenden Arbeiten:

git add -A .
git stash
git stash drop stash@{0}

Bitte beachten Sie, dass dadurch sowohl Ihre nicht inszenierten als auch Ihre gestaffelten lokalen Änderungen verworfen werden. Sie sollten also alles festlegen, was Sie behalten möchten, bevor Sie diese Befehle ausführen.

Ein typischer Anwendungsfall: Sie haben viele Dateien oder Verzeichnisse verschoben und möchten dann in den ursprünglichen Zustand zurückkehren.

Credits: https://stackoverflow.com/a/52719/246724


36
2017-12-16 11:32



Sie können dies in zwei Schritten tun:

  1. Geänderte Dateien wiederherstellen: git checkout -f
  2. Entfernen Sie nicht verfolgte Dateien: git clean -fd

26
2017-12-14 15:14



Ich dachte es wäre (Warnung: folgend werden lösche alles aus)

$ git reset --hard HEAD
$ git clean -fd

Das reset Änderungen rückgängig machen. Das clean um nicht verdeckte zu entfernen file und dVerzeichnisse.


23
2017-12-15 20:36



git reset --hard origin/{branchName}

Es löscht alle nicht verfolgten Dateien.


6
2018-05-17 15:20



Eine alternative Lösung besteht darin, die Änderungen zu übernehmen und dann diese Commits zu entfernen. Dies hat zunächst keinen unmittelbaren Vorteil, aber es eröffnet die Möglichkeit, in Chunks zu committen und ein Git-Tag für das Backup zu erstellen.

Sie können es auf dem aktuellen Zweig tun, so:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

Oder Sie können es auf einem abgelegenen Kopf machen. (vorausgesetzt, Sie beginnen in der Zweigstelle BRANCHNAME):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

Was ich jedoch normalerweise mache, besteht darin, in Chunks zu committen und dann einige oder alle Commits als "DISCARD: ..." zu benennen. Dann benutze die interaktive Rebase, um die schlechten Commits zu entfernen und die guten zu behalten.

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

Dies ist ausführlicher, aber Sie können genau überprüfen, welche Änderungen Sie verwerfen möchten.

Das git lol und git lola Shortcuts waren bei diesem Workflow sehr hilfreich.


2
2017-08-01 20:12



git clean -i zeigt Ihnen zuerst die zu löschenden Punkte an und geht nach Ihrer Bestätigung weiter. Ich finde das nützlich im Umgang mit wichtigen Dateien, die nicht versehentlich gelöscht werden sollten.

Sehen git help clean für weitere Informationen, einschließlich einiger anderer nützlicher Optionen.


2
2017-10-05 10:18



Wenn Sie alle Änderungen verwerfen möchten, können Sie eine der gültigen Optionen in einem Alias ​​in verwenden .gitconfig. Zum Beispiel:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

Verwendung: git discard


2
2017-10-25 20:04