Git entfernt nicht festgeschriebene Änderungen
-
Verwenden Sie
git checkout, um nicht festgeschriebene Änderungen in Git zu entfernen -
Verwenden Sie
git reset, um nicht festgeschriebene Änderungen in Git zu entfernen -
Verwenden Sie
git stashundgit stash, um nicht festgeschriebene Änderungen in Git zu entfernen
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.
- Unstage-Datei aus dem Staging-Bereich mit
git reset. - Änderungen mit
git checkoutrü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
--hardgibt 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 Siegit statusausgeführt haben, um Arbeitsdateien zu überprüfen. - Alias
HEADfü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:
git checkoutist nur sinnvoll, wenn sich Dateien nicht im Staging-Bereich befinden.git resetnützlich für Änderungen, die sich im Staging-Bereich befinden, aber Änderungen an nicht verfolgten Dateien nicht entfernen können, erfordert eine Kombination mitgit checkout.git reset --hard HEADkann kürzer als oben sein, ist aber potenziell gefährlich.git stashmitgit add .kann alles entfernen, einschließlich nicht verfolgter Dateien.