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 stash
undgit 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 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 Siegit 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:
git checkout
ist nur sinnvoll, wenn sich Dateien nicht im Staging-Bereich befinden.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 mitgit checkout
.git reset --hard HEAD
kann kürzer als oben sein, ist aber potenziell gefährlich.git stash
mitgit add .
kann alles entfernen, einschließlich nicht verfolgter Dateien.