Wie stoppe ich ein Git-Commit, wenn das VI auf dem Bildschirm auf eine Commit-Nachricht wartet?

203

Ich habe Git gebeten, ein Commit innerhalb von Git Bash durchzuführen. Es hat VI aufgerufen, wie es immer der Fall ist.

Ich möchte jetzt das Festschreiben abbrechen. Wie kann ich verhindern, dass das Festschreiben ab diesem Zeitpunkt fortgesetzt wird?

Ben Aston
quelle
Es lohnt sich hinzuzufügen, dass Sie Esc vor dem Betreten :q!drücken müssen, um vim zu verlassen.
M_Merciless

Antworten:

331

Sie haben zwei Möglichkeiten:

  • Geben Sie eine leere Festschreibungsnachricht an. Wenn es sich um ein neues Commit handelt und Sie die Nachricht noch nicht gespeichert haben, können Sie sie einfach verwenden :q!(beenden ohne zu speichern). Wenn Sie bereits gespeichert haben (oder ein vorheriges Commit ändern), löschen Sie einfach die gesamte Protokollnachricht und speichern Sie sie erneut. Dies kann mit ggdG+ :wqin Vim erfolgen.

  • Lassen Sie den Editor mit einem Exit-Code ungleich Null beenden. In Vim können Sie verwenden :cq(mit einem Fehlercode beenden).

Es ist erwähnenswert, dass Sie Ihre Arbeitskopie jederzeit auf den Zustand zurücksetzen können, in dem sie sich vor dem Festschreiben befand git reset HEAD^.

Eugene Yarmash
quelle
95
: cq ist das Geschäft. Aus irgendeinem Grund pflügt git weiter, egal ob ich benutze: q!
Sirex
2
git reset HEAD ^ würde lokale Änderungen verwerfen
juanmf
2
: q! funktioniert wahrscheinlich nicht, da bereits eine vordefinierte Nachricht vorhanden ist. Sie bearbeiten sie nur.
Papipo
Schluckauf: Wenn Sie git reset HEAD^mehr verlangen , interpretiert Ihre Shell ^ möglicherweise als Zeilenfortsetzung. Versuchen Sie git reset "HEAD^", git reset HEAD^^oder git reset HEAD~1stattdessen gemäß dieser Antwort: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas
75
  • :q!funktioniert nicht beim Ändern eines Commits. Die Festschreibungsnachricht wird nicht aktualisiert, die Änderung wird jedoch ausgeführt :-(
  • :cq bricht die Änderung vollständig ab.
Daniel Pinyol
quelle
1
Ich wünschte, ich könnte noch +1 hinzufügen. Ich war schon viele Male hier, als mein Änderungsantrag das falsche Commit aufgreift.
Wyrmwood
8

Um zusammenzufassen:

  • Wenn Sie ein neues Commit erstellen (dh git commit), beenden Sie die Verwendung von :q!.
  • git commit --amendEntfernen Sie beim Ändern (dh ) die Festschreibungsnachricht (nur die ersten Zeilen, die nicht mit einem # beginnen), indem Sie beispielsweise v gedrückt halten und sie mit den Pfeiltasten auswählen und dann Entf drücken. Beenden Sie mit :wq, um Änderungen zu übernehmen ! Wenn Sie :q!die Änderungen verwenden, gehen sie verloren und die vorherige Festschreibungsnachricht wird verwendet.

Wenn Sie VIM verwenden, ist es in beiden Fällen in Ordnung, mit zu beenden. :cqVIM wird mit einem Fehlercode beendet und das Festschreiben wird abgebrochen.

Maciej Piekarski
quelle