Mein Problem ist, dass ich eine Datei geändert habe, z. B.: README, eine neue Zeile ' this für meine Testzeile ' hinzugefügt und die Datei gespeichert habe. Dann habe ich die folgenden Befehle ausgegeben
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
Ich habe den Code nicht an github gesendet. Jetzt möchte ich dieses Commit abbrechen.
Dafür habe ich verwendet
git reset --hard HEAD~1
Aber ich habe die neu hinzugefügte Zeile " Dies für meine Testzeile " aus der README-Datei verloren. Dies sollte nicht passieren. Ich brauche den Inhalt, um da zu sein. Gibt es eine Möglichkeit, den Inhalt beizubehalten und mein lokales Commit abzubrechen?
git
git-reset
git-commit
Amal Kumar S.
quelle
quelle
git revert
, wodurch ein neues Commit mit dem umgekehrten Unterschied des zurückgesetzten Commits erstellt wird. Durch das Zurücksetzen wird Ihr aktueller Zweig einfach auf ein anderes Commit verwiesen, in diesem Fall auf das vor dem Commit, das Sie "vergessen" möchten.git-commit
Vorgang abgebrochen werden kann, wenn Sie die Nachricht leer lassen. Wenn Sie das Commit also noch nicht abgeschlossen haben, kann dies hilfreich sein.Antworten:
Verwenden Sie einfach
git reset
ohne die--hard
Flagge:PS: Auf Unix-basierten Systemen können Sie verwenden,
HEAD^
was gleich istHEAD~1
. Unter WindowsHEAD^
funktioniert dies nicht, da^
eine Leitungsfortsetzung signalisiert wird. Ihre Eingabeaufforderung fragt Sie also einfachMore?
.quelle
--mixed
im Handbuch genannt .@^
als Abkürzung fürHEAD^
.Verwenden Sie
--soft
anstelle der--hard
Flagge:quelle
git reset --soft HEAD^
entfernt das letzte lokale (nicht gedrückte) Commit, behält aber die Änderungen bei, die Sie vorgenommen habengit reset --soft HEAD~
unter WindowsWenn Sie sich mitten in einem Commit befinden (dh bereits in Ihrem Editor), können Sie es abbrechen, indem Sie alle Zeilen über dem ersten löschen
#
. Dadurch wird das Commit abgebrochen.Sie können also alle Zeilen löschen, sodass die Festschreibungsnachricht leer ist, und dann die Datei speichern:
Sie erhalten dann eine Nachricht mit der Aufschrift
Aborting commit due to empty commit message.
.BEARBEITEN :
Sie können auch alle Zeilen löschen und das Ergebnis ist genau das gleiche.
Um alle Zeilen in vim zu löschen (wenn dies Ihr Standardeditor ist), geben Sie im Editor Folgendes ein
gg
, um zur ersten Zeile zu gelangen, unddG
löschen Sie dann alle Zeilen. Zum Schluss schreiben und beenden Sie die Datei mitwq
und Ihr Commit wird abgebrochen.quelle
rebase -i mybranchname
Als Erstes sollten Sie festlegen, ob Sie die lokalen Änderungen beibehalten möchten, bevor Sie die Festschreibungsnachricht löschen.
Verwenden Sie
git log
diese Option , um aktuelle Festschreibungsnachrichten anzuzeigen, und suchen Sie danncommit_id
vor dem Festschreiben, das Sie löschen möchten, und nicht vor dem Festschreiben, das Sie löschen möchten.Wenn Sie die lokal geänderten Dateien behalten und einfach die Commit-Nachricht löschen möchten:
git reset --soft commit_id
Wenn Sie alle lokal geänderten Dateien und die Festschreibungsnachricht löschen möchten:
git reset --hard commit_id
Das ist der Unterschied zwischen weich und hart
quelle
Sie können Git mithilfe eines der folgenden Parameter mitteilen, was mit Ihrem Index (eine Reihe von Dateien, die zum nächsten Commit werden sollen) und Ihrem Arbeitsverzeichnis zu tun ist, wenn Sie das Zurücksetzen von Git durchführen:
--soft
: Nur Commits werden zurückgesetzt, während Index und Arbeitsverzeichnis nicht geändert werden.--mixed
: Dadurch wird der Index auf den HEAD zurückgesetzt, während das Arbeitsverzeichnis nicht berührt wird. Alle Änderungen bleiben im Arbeitsverzeichnis und werden als geändert angezeigt.--hard
: Es setzt alles (Commits, Index, Arbeitsverzeichnis) zurück, um mit dem HEAD übereinzustimmen.In Ihrem Fall würde ich
git reset --soft
Ihre geänderten Änderungen im Index und im Arbeitsverzeichnis behalten. Lesen Sie dies für eine detailliertere Erklärung.quelle
Verwenden Sie den folgenden Befehl:
Danach können Sie auch Dateien anzeigen, die wie unten beschrieben zurückgesetzt werden.
quelle