Frage

Mein Problem ist, dass ich eine Datei geändert habe, z. B. Readme, eine neue Zeile hinzugefügt. 'Dies für meine Testlinie'und speichern die Datei, 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 nach Github gedrückt, jetzt möchte ich dieses Commit stornieren.

Dafür habe ich benutzt

   git reset --hard HEAD~1

Aber ich habe die neu hinzugefügte Linie verloren 'Dies für meine Testlinie'Aus der Readme -Datei. Dies sollte nicht passieren. Ich brauche den Inhalt, um dort zu sein. Gibt es eine Möglichkeit, den Inhalt zu behalten und mein lokales Commit zu stornieren?

War es hilfreich?

Lösung

Benutz einfach git reset ohne das --hard Flagge:

git reset HEAD~1

PS: Auf Unix -basierten Systemen können Sie verwenden HEAD^ das ist gleich zu HEAD~1. Unter Windows HEAD^ wird nicht funktionieren, weil ^ signalisiert eine Linienanleitung. Ihre Eingabeaufforderung wird Sie also nur fragen More?.

Andere Tipps

Verwenden --soft Anstatt von --hard Flagge:

git reset --soft HEAD^

Wenn Sie sich mitten in einem Commit befinden (dh bereits in Ihrem Editor), können Sie es stornieren, indem Sie alle Zeilen über dem ersten löschen #. Das wird das Komitee abbrechen.

Sie können also alle Zeilen löschen, damit die Commit -Nachricht leer ist, und speichern Sie die Datei:

It should look like this.

Sie werden dann eine Nachricht erhalten, die steht Aborting commit due to empty commit message..

BEARBEITEN:

Sie können auch löschen alle Die Linien und das Ergebnis sind genau das gleiche.

Um alle Zeilen in VIM zu löschen (wenn dies Ihr Standard -Editor ist), geben Sie nach dem Editor ein gg dann zur ersten Zeile gehen, dann dG Alle Zeilen löschen. Schließlich schreiben und beenden Sie die Datei mit wq Und Ihr Commit wird abgebrochen.

Das erste, was Sie tun sollten, ist festzustellen, ob Sie die lokalen Änderungen beibehalten möchten, bevor Sie die Commit -Nachricht löschen.

Verwenden git log Um aktuelle Commit -Nachrichten anzuzeigen, finden Sie dann die commit_id Vor Das Commit, das Sie löschen möchten, nicht das Commit, das Sie löschen möchten.

Wenn Sie die lokal geänderten Dateien beibehalten möchten und einfach die Commit -Nachricht löschen möchten:

git reset --soft commit_id

Wenn Sie alle lokal geänderten Dateien und die Commit -Nachricht löschen möchten:

git reset --hard commit_id

Das ist der Unterschied von Sanft und schwer

Sie können Git erkennen, was mit Ihrem Index zu tun ist (set Dateien, die zum nächsten Commit werden) und ein Arbeitsverzeichnis, wenn Sie Git Reset unter Verwendung eines der Parameter verwenden:

--soft: Es werden nur Commits zurückgesetzt, während der Index und das Arbeitsverzeichnis nicht geändert werden.

--mixed: Dies setzt den Index auf den Kopf zurück, während das Arbeitsverzeichnis nicht berührt wird. Alle Änderungen bleiben im Arbeitsverzeichnis und erscheinen als modifiziert.

--hard: Es setzt alles (Commits, Index, Arbeitsverzeichnis) zurück, um dem Kopf zu entsprechen.

In Ihrem Fall würde ich verwenden git reset --soft So halten Sie Ihre geänderten Änderungen im Index- und Arbeitsverzeichnis. Achten Sie darauf, dass Sie prüfen das raus Für eine detailliertere Erklärung.

Verwenden Sie den folgenden Befehl: $ git reset head ~ 1 Danach können Sie auch Dateien anzeigen, wie sie wie die folgende Antwort zurückkehren.

Nicht gestrichene Änderungen nach Reset: M -Anwendung/Konfiguration/Konfiguration.php m Application/config/database.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top