So entsperren Sie das lokale Git-Commit

Mein Problem ist, dass ich die Datei geändert habe, zum Beispiel: README, eine neue Zeile hinzugefügt: "Dies ist für meine Testzeile", und die Datei gespeichert. Dann habe ich die folgenden Befehle freigegeben

  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 auf github gedrückt, jetzt möchte ich dieses Commit abbrechen.

Dafür habe ich verwendet

  git reset --hard HEAD~1 

Ich habe jedoch die neu hinzugefügte Zeile "Dies ist für meine Testzeile" aus der README-Datei verloren. Das sollte nicht sein. Ich brauche den Inhalt, um dort zu sein. Gibt es eine Möglichkeit, Inhalte zu speichern und mein lokales Commit abzubrechen?

560
31 янв. von Amal Kumar S am 31. Januar festgelegt 2011-01-31 15:14 '11 am 15:14 2011-01-31 15:14
@ 7 Antworten

Verwenden Sie einfach git reset ohne das Flag --hard :

 git reset HEAD~1 

PS: Auf Unix-basierten Systemen können Sie HEAD^ , also HEAD~1 . In Windows funktioniert HEAD^ nicht, da ^ eine Fortsetzung der Zeile signalisiert. Fordert Sie Ihre Eingabeaufforderung nur nach More? .

1085
31 янв. Die Antwort erhält Koraktor am 31. Januar 2011-01-31 15:17 '11 am 15:17 2011-01-31 15:17

Verwenden Sie --soft anstelle von --hard flag:

border=0
 git reset --soft HEAD^ 
143
10 авг. Die Antwort wird mit TpED 10 Aug gegeben. 2012-08-10 11:02 '12 um 11:02 Uhr 2012-08-10 11:02

Wenn Sie sich gerade in einem Commit befinden (d. H. Bereits im Editor), können Sie den Vorgang abbrechen, indem Sie alle Zeilen über dem ersten # löschen. Dies unterbricht das Festschreiben.

Daher können Sie alle Zeilen löschen, sodass die Commit-Nachricht leer ist, und dann die Datei speichern:

2019

10 марта '17 в 0:09 2017-03-10 00:09 Die Antwort ist inostia 10. März 17 um 0:09 2017-03-10 00:09 gegeben

Sie können Git mitteilen, was mit Ihrem Index (der Menge der Dateien, die als nächstes festgeschrieben werden) und dem Arbeitsverzeichnis beim Ausführen von git reset mit einem der folgenden Parameter zu tun ist:

--soft : Nur Commits werden zurückgesetzt und der Index und das Arbeitsverzeichnis werden nicht geändert.

--mixed : --mixed wird der Index gemäß dem Header zurückgesetzt, und das Arbeitsverzeichnis ist nicht betroffen. Alle Änderungen bleiben im Arbeitsverzeichnis und erscheinen als geändert.

--hard : setzt alles (Commits, Index, Arbeitsverzeichnis) entsprechend dem Header zurück.

In Ihrem Fall würde ich git reset --soft , um Ihre geänderten Änderungen im Index und im Arbeitsverzeichnis zu speichern. Vergewissern Sie sich, dass Sie dies für eine detailliertere Erklärung lesen.

5
29 мая '18 в 13:22 2018-05-29 13:22 Die Antwort wird von Nesha Zoric am 29. Mai 18 um 13:22 Uhr 2018-05-29 13:22 gegeben

Zuerst müssen Sie herausfinden, ob Sie lokale Änderungen speichern möchten, bevor Sie die Festschreibungsnachricht löschen.

Verwenden Sie git log , um die aktuellen Festschreibungsnachrichten anzuzeigen, und suchen Sie dann commit_id, bevor Sie löschen möchten, nicht nur die, die Sie löschen möchten.

Wenn Sie lokal geänderte Dateien speichern möchten, löschen Sie einfach die Commit-Nachricht:

git reset --soft commit_id

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

git reset --hard commit_id

Was ist der Unterschied ist weich und hart

2
02 сент. die antwort wird gegeben mistdon 02 sep . 2018-09-02 06:43 '18 at 6:43 2018-09-02 06:43

Verwenden Sie den folgenden Befehl: $ git reset HEAD ~ 1 Danach können Sie auch die zurückgegebenen Dateien anzeigen (siehe unten).

Nicht definierte Änderungen nach dem Zurücksetzen: M application / config / config.php M application / config / database.php

1
14 мая '18 в 16:25 2018-05-14 16:25 Die Antwort wird Omkar gegeben 14. Mai '18 um 16:25 Uhr 2018-05-14 16:25

Unterschied zwischen git reset --mixed, --soft und --hard

Voraussetzung: Wenn eine Änderung an einer vorhandenen Datei in Ihrem Repository vorgenommen wird, wird diese Änderung zunächst als nicht festgelegt betrachtet. Um die Änderungen festzuschreiben, müssen Sie sie vorbereiten, d. H. Sie mit git add zum Index git add . Während des Festschreibens werden Dateien, die platziert werden, dem Index hinzugefügt.

Nehmen wir ein Beispiel:

 - A - B - C (master) 

HEAD gibt C und der Index entspricht C

- weich

  • Wenn wir ein git reset --soft B ausführen, um Commit C zu löschen und den main / HEAD auf B zu git reset --soft B .
  • Master / HEAD zeigt jetzt auf B, der Index wird jedoch immer noch von C geändert.
  • Wenn Sie den git status Sie Dateien, die in Commit C indiziert wurden , phasenweise sehen .
  • Wenn Sie git commit an diesem Punkt ausführen, wird ein neues Commit mit den gleichen Änderungen wie in C erstellt

- gemischt

  • Führen Sie git reset --mixed B
  • Bei der Ausführung zeigt Master / HEAD auf B, und der Index ändert sich aufgrund der verwendeten gemischten Markierung ebenfalls in B.
  • Wenn zu diesem Zeitpunkt git commit ausgeführt wird, passiert nichts, da der Index HEAD entspricht .
  • Wir haben immer noch Änderungen im Arbeitsverzeichnis, aber da sie nicht im Index enthalten sind, werden sie vom Status git als nicht erfasst angezeigt .
  • Um sie zu beheben, müssen Sie git add und dann wie gewohnt beheben.

--hard

  • Führen Sie git reset --hard B
  • Bei der Ausführung von Master / HEAD wird auf B verwiesen und das Arbeitsverzeichnis geändert
  • In C hinzugefügte Änderungen und alle nicht festgeschriebenen Änderungen werden gelöscht .
  • Dateien in der Arbeitskopie entsprechen Commit B, dies führt zum Verlust aller Änderungen, die an Commit C vorgenommen wurden, sowie nicht festgeschriebenen Änderungen.

Ich hoffe, dass ein Vergleich der zur Verwendung mit dem Befehl git reset verfügbaren Flags jemandem helfen wird, sie weise zu verwenden. Kontaktieren Sie sie für weitere Informationen link1 link2

0
18 янв. Die Antwort wird von Keshan Nageswaran 18. Januar gegeben 2019-01-18 19:48 '19 um 19:48 Uhr 2019-01-18 19:48

Weitere Fragen zu Tags: oder Ask a Question