Ja. Schreiben Sie die Commit-Nachricht in eine andere Datei ( :w /some/other/path.txt
). Beenden Sie dann den Editor ohne Speichern ( :q!
). Wenn Sie die Datei zuvor unter ihrem ursprünglichen Pfad gespeichert haben, löschen Sie alles und schreiben Sie zuerst die leere Datei (eine leere Festschreibungsnachricht bricht die Festschreibung ab).
Wenn Sie nun bereit sind, "for reals" festzuschreiben, verwenden Sie die Nachrichtendatei, die Sie unter dem alternativen Pfad gespeichert haben.
Kopieren Sie alternativ die Festschreibungsnachricht in einen der Puffer von vim.
Es ist erwähnenswert, dass Sie dies wirklich überhaupt nicht tun müssen : commit --amend
Sie können das Commit nach dem Erstellen ändern. Die einfache Lösung besteht darin, das Commit mit dem zu erstellen, was Sie haben, und es dann vor dem Push zu reparieren. Sie können das Commit sogar einfach in seinem fehlerhaften Zustand beenden reset HEAD~
(setzt Sie auf den Zustand zurück, in dem sich Ihre Arbeitskopie vor dem Commit befand), Ihre Arbeitskopie reparieren und dann commit -a -c HEAD@{1}
die alte Commit-Nachricht verwenden.
write the empty file (an empty commit message will abort the commit)
Teil funktionierte wie ein Zauber, danke!Wenn Ihr Editor mit einem Fehlercode beendet werden kann, bricht Git das Commit ab. Geben Sie bei Verwendung von VIM Folgendes ein
Beenden mit einem Fehlercode ungleich Null und Abbrechen des Commits.
quelle
commit --amend
da Sie sonst die vorhandene Commit-Nachricht und löschen müssten:wq
.git commit --amend
stattgit rebase --continue
während der Rebase tat.Wenn Sie vim geöffnet haben, um Ihre Commit-Nachricht zu schreiben, löschen Sie einfach die Zeilen, die nicht mit # beginnen, und git bricht Ihr Commit ab
quelle
ggdG
schneidet den gesamten Inhalt der Nachricht ab. Beim nächsten Ausführen könnenvim
Sie nurP
den Text ausschneiden, den Sie zuvor ausgeschnitten haben.Während Sie das Commit abbrechen können, besteht ein anderer Ansatz darin, das Commit anschließend zu ändern . Übernehmen Sie einfach Ihre aktuelle Arbeit, nehmen Sie die gewünschten zusätzlichen Änderungen vor und führen Sie
git add
sie ausgit commit --amend
. Sie werden wieder in den Commit-Nachrichten-Editor aufgenommen. Wenn Sie speichern, wird das Commit so geändert, dass es die zusätzlichen Änderungen und Ihre neue Commit-Nachricht enthält.quelle
Ja es ist möglich. Zum Festschreiben MUSS Ihr Editor die Festschreibungsnachricht in die Datei schreiben
.git/COMMIT_EDITMSG
und mit einem 0-Statuscode beenden.Wenn Sie also VI / VIM verwenden, möchten Sie möglicherweise Folgendes tun ...
:w
(standardmäßig wird der aktuelle Inhalt in gespeichert.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
Das
-F /path/to/file
füllt den Editor mit einem bestimmten Inhalt aus / path / to / file. Standardmäßig wird das Commit jedoch sofort ausgeführt, es sei denn, Sie geben das-e
Flag zusätzlich zur Bearbeitung an .quelle
/foo/bar/
Verzeichnis, relativ zum Projektstamm)git commit -eF ../../.git/COMMIT_MESSAGE
:w
tun:sav committmp
undgit commit -eF committmp
Normalerweise mache ich meine Verpflichtungen innerhalb
IntelliJ
der bereitgestellten Terminals. Leider sind meine Commits manuell:git commit -m'my message' // etc
Das einzige, was ich für sicher halte, ist das Schließen des Terminalfensters! Markieren Sie einfach Ihren Text, wenn Sie ihn speichern möchten, kopieren Sie ihn und schließen Sie das Terminalfenster.
quelle
Die Antwort von @bdonlan ist genau für diese Frage gut, aber ich werde auf eine Situation hinweisen, in der Sie möglicherweise eine bessere Lösung wünschen.
Angenommen, Sie möchten Änderungen zum letzten Commit hinzufügen. Sie tun also, was @bdolan vorgeschlagen hat:
Stellen Sie sich vor, dass Sie beim Schreiben der neuen Nachricht das Hinzufügen dieser Dateien zu diesem Commit bedauern. Das Problem ist, dass Sie mit einer bereits gespeicherten Commit-Nachricht nicht weiterkommen. Wenn Sie den Editor verlassen (mit oder ohne Speichern), werden diese Änderungen zum letzten Commit hinzugefügt. Wenn Sie zu dem Punkt zurückkehren, an dem Sie sich vor diesen Aktionen befanden, müssen Sie das letzte Commit aufteilen. Ich wette, Sie möchten es vermeiden.
Der Trick besteht darin, den Editor zu speichern und zu beenden, während nur Zeilen beginnen, die mit
#
oder überhaupt nicht beginnen . Beim Beenden werden Sie mit der folgenden Nachricht begrüßt:Und Sie haben das letzte Commit überhaupt nicht geändert.
quelle
git commit; vim ....; git commit --amend; git reset HEAD@{1}
. Das heißt: Wenn ich den Änderungsantrag "rückgängig machen" möchte, muss ich das vorherige Commit nicht aufteilen. Das Commit-Objekt, das vor der Änderung HEAD war, wird als gespeichertHEAD@{1}
. Außerdem hat zetta bereits vorgeschlagen, alle nicht kommentierten Zeilen zu löschen.