Git: Stellen Sie die Nachricht des fehlgeschlagenen Commit wieder her

Lesezeit: 3 Minuten

Hin und wieder, da bastle ich pflichtbewusst ein schöne, beschreibende Commit-Nachrichtbekomme ich eine Fehlermeldung:

".git/COMMIT_EDITMSG" 81L, 2108C written
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.

Beachten Sie, dass dies normalerweise nach ist :wq. Ich überprüfe die .git/COMMIT_EDITMSG Datei und es enthält keine Änderungen. Gibt es einen anderen Ort, an dem Git diese Nachricht speichert, damit ich sie wiederherstellen und erneut versuchen kann, sie zu bestätigen? Haben Leute Erfahrung mit diesem Problem und wissen, warum es mir passieren könnte? Ich habe keine Probleme beim Schreiben in andere Dateien und die Berechtigungen scheinen in Ordnung zu sein.

  • Haben Sie versucht, nach der Sicherungsdatei von vim zu suchen?

    – freitass

    3. Februar 2012 um 18:33 Uhr

  • das wäre .git/.COMMIT_EDITMSG.swp? Ja, kein Glück.

    – leer

    3. Februar 2012 um 19:19 Uhr

  • Ich habe keine Lösung zum Wiederherstellen der Commit-Nachricht, aber ich weiß vielleicht, warum Sie den Fehler erhalten. Ich sehe dieses Verhalten auf meinem Mac bei der Arbeit, aber nicht auf Linux zu Hause. Wenn ich beim Versuch, meine Commit-Nachricht zu speichern, versehentlich „:Wq“ eingebe, schlägt das Commit fehl, wenn ich zurückgehe und „:wq“ eingebe.

    – haydenmühl

    3. Februar 2012 um 21:35 Uhr

  • Mir ist aufgefallen, dass dies manchmal passiert, wenn ich versuche, einen Git-Commit zu signieren (standardmäßig git commit -S und mein USB-Stick ist nicht eingesteckt. In dieser Situation, .git/COMMIT_EDITMSG existiert, und Sie können die Nachricht dort abrufen. Ich bin mir nicht 100% sicher, warum es nicht automatisch in vim wiederhergestellt wird, nachdem ich meinen Schlüssel einstecke und es versuche git commit -S aber nochmal…

    – jwir3

    13. April 2017 um 19:57 Uhr

  • wie @haydenmuhl es erwähnt hat :Wq beschuldigen. Einstellung git config --global core.editor vim -f Wie in dieser SO-Antwort erläutert, wird das Problem gelöst.

    – Amir Nissim

    25. Juni 2018 um 7:55 Uhr


Ich konnte dies lösen, indem ich verschiedene Lösungen kombinierte und nur Git verwendete (ohne von vim oder seiner Konfiguration abhängig zu sein).

In meinem Fall verwende ich auch ein Repository mit Submodulen, was es etwas anders macht:

Anstatt von .git/.COMMIT_EDITMSG
Die Nachricht wird gespeichert in .git/modules/{REPO}/COMMIT_EDITMSG

Zum Glück können wir verwenden git rev-parse --git-dir uns das zu sagen.

Und wir können verwenden git commit -eF [FILE] um die Commit-Nachricht aus einer Datei zu nehmen (-F) und um die Nachricht zu bearbeiten (-e).

Alle zusammen:

git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG

Da das zu lang ist, können wir auch einen Alias ​​definieren

git config --global alias.recommit '!git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG'

Damit wir es so nennen können:

git recommit [... other commit arguments]

  • Hervorragende Antwort!

    – Theutz

    14. Juni 2020 um 17:27 Uhr

  • Perfekt! Dies sollte die richtige Antwort sein.

    – Nuno Silva

    7. Januar 2021 um 9:31 Uhr

Nicht sicher, was Git auf COMMIT_EDITMSG betrifft, wenn Sie sich in diesem Zustand befinden. Wie bereits erwähnt, können Sie möglicherweise sehen, ob vim es gespeichert hat. Aber ich verstehe, dass vim standardmäßig das Backup löscht, es sei denn, Sie haben ihm ausdrücklich gesagt, dass es sie behalten soll. Wenn Sie diese Dateien nicht über alle Ihre Verzeichnisse verstreut haben möchten, können Sie außerdem ein Verzeichnis angeben, in dem sie abgelegt werden sollen (möglicherweise müssen Sie das Verzeichnis zuerst manuell erstellen).

Versuchen Sie, die folgenden zwei Zeilen zu Ihrer ~/.vimrc-Datei hinzuzufügen:

 backup
 backupdir=~/.vim/backup

Erstellen Sie manuell das Verzeichnis ~/.vim/backup, bearbeiten Sie dann eine Datei und beenden Sie es. Sie sollten eine Kopie der Datei mit einem “~” am Ende des Namens in Ihrem Sicherungsverzeichnis sehen.

Nebenbei bemerkt, wenn Sie so faul sind wie ich, verwenden Sie “: x”, um vim anstelle von “: wq” zu beenden. Das “:x” führt sowohl ein Schreiben als auch ein Beenden aus.

  • ZZ ist sogar besser als :x<CR>

    – Geoff Reedy

    13. Februar 2012 um 21:45 Uhr


  • ” 1: E492: Kein Editor-Befehl: backup line 2: E492: Kein Editor-Befehl: backupdir=~/.vim/backup”

    – Chucky

    22. Oktober 2019 um 7:36 Uhr

Ich habe einen Kollegen, der das gleiche Problem hatte. Vielleicht tippt OP

:Wq

Anstatt von

:wq

Ich würde vorschlagen, mit zu beenden

:x

Um dieses Problem zu vermeiden.

1185890cookie-checkGit: Stellen Sie die Nachricht des fehlgeschlagenen Commit wieder her

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy