Git entfernt nicht festgeschriebene Änderungen

Stewart Nguyen 30 Januar 2023
  1. Verwenden Sie git checkout, um nicht festgeschriebene Änderungen in Git zu entfernen
  2. Verwenden Sie git reset, um nicht festgeschriebene Änderungen in Git zu entfernen
  3. Verwenden Sie git stash und git stash, um nicht festgeschriebene Änderungen in Git zu entfernen
Git entfernt nicht festgeschriebene Änderungen

In diesem Artikel erfahren Sie, wie Sie nicht festgeschriebene Änderungen rückgängig machen, die wir am lokalen Repository vorgenommen haben.

Wenn wir mit einer Funktion arbeiten, erstellen wir möglicherweise zuerst neue Dateien, fügen Änderungen an vorhandenen Dateien hinzu und löschen dann einige Dateien. Irgendwann stellen wir fest, dass alles falsch ist und müssen zum vorherigen Commit zurückkehren. Was sollen wir machen?

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Wir haben mehrere Möglichkeiten, dies zu erreichen.

Verwenden Sie git checkout, um nicht festgeschriebene Änderungen in Git zu entfernen

Dieser Befehl macht nicht festgeschriebene Änderungen für nachverfolgte Dateien rückgängig. Nachverfolgte Dateien sind Dateien, die git kennt, im Allgemeinen nachdem sie von git add hinzugefügt wurden

$ git checkout .
Updated 2 paths from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Bitte beachten Sie, dass git checkout nicht funktioniert, wenn Dateien bereits via git add zum Staging-Bereich hinzugefügt wurden.

$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ git checkout file.txt
Updated 0 paths from the index
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Im obigen Beispiel werden Änderungen an file.txt nicht rückgängig gemacht, da sich diese Datei im Staging-Bereich befindet.

Verwenden Sie git reset, um nicht festgeschriebene Änderungen in Git zu entfernen

Um nicht festgeschriebene Änderungen im Staging-Bereich zu entfernen, müssen wir die folgenden Schritte ausführen.

  1. Unstage-Datei aus dem Staging-Bereich mit git reset.
  2. Änderungen mit git checkout rückgängig machen.
$ git reset file.txt
Unstaged changes after reset:
M	file.txt
$ git checkout file.txt
Updated 1 path from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Eine andere Möglichkeit, nicht festgeschriebene Änderungen mit git reset zu entfernen, ist die Option --hard und die Parameter HEAD.

$ git reset --hard HEAD
HEAD is now at 1e087f5 Make some change to file.txt
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)
  • Die Option --hard gibt Git an, ALLE Änderungen zwischen dem aktuellen Zustand und dem Commit im letzten Argument zu werfen. Aus diesem Grund wird dieser Befehl als gefährlich angesehen und sollte verwendet werden, nachdem Sie git status ausgeführt haben, um Arbeitsdateien zu überprüfen.
  • Alias ​​HEAD für den letzten Commit.

Verwenden Sie git stash und git stash, um nicht festgeschriebene Änderungen in Git zu entfernen

Der Nachteil von git checkout und git reset ist, dass sie nicht verfolgte Dateien nicht entfernen konnten. feature.txt bleibt bestehen, nachdem diese Befehle ausgeführt wurden.

Betrachten Sie das erste Beispiel.

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Zum Entfernen aller nicht festgeschriebenen Änderungen, einschließlich der bereitgestellten Dateien, nachverfolgten, aber nicht bereitgestellten und nicht nachverfolgten Dateien. Wir werden den ordentlichen Ansatz git stash verwenden.

git stash erlaubt uns, die Änderungen zu speichern, erfordert aber kein git commit; es fungiert als temporärer Speicher für nicht festgeschriebene Dateien.

Nachdem wir Änderungen zum temporären Speicher hinzugefügt haben, weisen wir Git an, diese gespeicherten zu löschen. Daher werden alle nicht festgeschriebenen Änderungen gelöscht.

$ git add .
$ git stash
Saved working directory and index state WIP on main: 16b9767 deprecated_feature.txt
$ git stash drop
Dropped refs/stash@{0} (aebeb2cbdcec917331f5793ef1238f5a525d29ec)
$ git status
On branch main
nothing to commit, working tree clean

Zusammenfassend haben wir mehrere Ansätze, um nicht festgeschriebene Änderungen zu entfernen:

  1. git checkout ist nur sinnvoll, wenn sich Dateien nicht im Staging-Bereich befinden.
  2. git reset nützlich für Änderungen, die sich im Staging-Bereich befinden, aber Änderungen an nicht verfolgten Dateien nicht entfernen können, erfordert eine Kombination mit git checkout.
  3. git reset --hard HEAD kann kürzer als oben sein, ist aber potenziell gefährlich.
  4. git stash mit git add . kann alles entfernen, einschließlich nicht verfolgter Dateien.

Verwandter Artikel - Git Commit