Ist es möglich, die letzte inszenierte (nicht festgeschriebene) Änderung in git aufzuheben ? Angenommen, der aktuelle Zweig enthält viele Dateien, einige sind inszeniert, andere nicht. Irgendwann hat ein dummer Programmierer versehentlich Folgendes ausgeführt:
git add -- .
...anstatt:
git checkout -- .
Kann dieser Programmierer jetzt seine letzten Änderungen mit einem magischen Git- Befehl aufheben ? Oder hätte er sich verpflichten sollen, bevor er überhaupt experimentierte?
git add
Befehl hinzugefügt wurden , insbesondere für die Dateien, in denen bereits Änderungen vorgenommen wurden und in denen einige Änderungen rückgängig gemacht und nicht bereitgestellt wurden. Ich kann nicht sagen, dass die andere Frage nicht verwandt ist.Antworten:
Sie können verwenden
git reset
. Dadurch werden alle Dateien, die Sie nach Ihrem letzten Commit hinzugefügt haben, "aufgehoben".Wenn Sie nur einige Dateien entfernen möchten, verwenden Sie
git reset -- <file 1> <file 2> <file n>
.Es ist auch möglich, einige der Änderungen in Dateien mithilfe von zu entfernen
git reset -p
.quelle
-p
Wechsel erwähnt hast . Vielen Dank! :)Sie können das letzte Git-Add nicht rückgängig machen , aber Sie können alle
add
s seit dem letzten Commit rückgängig machen .git reset
ohne ein Commit-Argument wird der Index zurückgesetzt (nicht bereitgestellte Änderungen):quelle
reset
eine einzelne Datei verwenden oderreset -p
ein bestimmtes Stück entfernen.Also die wahre Antwort auf
ist eigentlich: Nein, man kann nicht nur den letzten inszenieren
git add
.Das heißt, wenn wir die Frage wie folgt interpretieren:
Anfangsdatei:
Erste Änderung gefolgt von
git add
:Zweite Änderung gefolgt von
git add
:In diesem Fall
git reset -p
hilft das nicht, da die kleinste Granularität Linien sind.git
weiß das nicht über den Zwischenzustand von:nicht mehr.
quelle
Sie könnten verwenden
git reset
(siehe Dokumente )quelle
Zum jetzigen Zeitpunkt fordert git auf:
use "git rm --cached <file>..." to unstage
wenn Dateien nicht im Repo waren. Es löst die Dateien auf und hält sie dort.use "git reset HEAD <file>..." to unstage
Wenn sich die Dateien im Repo befanden und Sie sie als geändert hinzufügen. Die Dateien bleiben unverändert und werden nicht mehr bereitgestellt.Meines Wissens können Sie das nicht rückgängig machen,
git add --
aber Sie können eine Liste von Dateien wie oben erwähnt entfernen.quelle
Entfernen Sie die Datei aus dem Index, behalten Sie sie jedoch versioniert bei und lassen Sie nicht festgeschriebene Änderungen in der Arbeitskopie übrig:
Setzen Sie die Datei von HEAD auf den letzten Status zurück, machen Sie Änderungen rückgängig und entfernen Sie sie aus dem Index:
Dies ist erforderlich, da
git reset --hard HEAD
es nicht mit einzelnen Dateien funktioniert.<file>
Aus dem Index und der Versionierung entfernen und die nicht versionierte Datei mit Änderungen in der Arbeitskopie beibehalten:<file>
Aus der Arbeitskopie entfernen und vollständig versionieren:quelle
Wenn Sie alle hinzugefügten Dateien zum Festschreiben aus git entfernen möchten
Wenn Sie eine einzelne Datei entfernen möchten
quelle
Sie können verwenden
um die kürzlich hinzugefügten lokalen Dateien rückgängig zu machen
um die Änderungen für eine bestimmte Datei rückgängig zu machen
quelle
Je nach Größe und Umfang der Schwierigkeit können Sie einen (temporären) Scratch-Zweig erstellen und die aktuelle Arbeit dort festschreiben.
Wechseln Sie dann zu Ihrem ursprünglichen Zweig, checken Sie ihn aus und wählen Sie die entsprechenden Dateien aus dem Scratch-Commit aus.
Zumindest hätten Sie eine permanente Aufzeichnung des aktuellen und vorherigen Status, von dem aus Sie arbeiten können (bis Sie diesen Arbeitszweig löschen).
quelle