何らかの理由でコミットが失敗した場合は、gitコミットメッセージを回復できますか?

何らかの理由でコミットが失敗した場合は、gitコミットメッセージを回復できますか?

git commitgpg.commitsign = true&&失敗(何らかの理由で)と同じ理由で失敗する可能性がありますgpg。コマンドを再試行すると、空のエディタが開き、メッセージが失われます。

この場合、同じメッセージでコミットを再試行するために作成したコミットメッセージを復元する方法はありますか?

答え1

からman git-commit

FILES
       $GIT_DIR/COMMIT_EDITMSG
           This file contains the commit message of a commit in progress. If git commit exits due to an error before creating a commit, any commit message that has been provided
           by the user (e.g., in an editor session) will be available in this file, but will be overwritten by the next invocation of git commit.

git commitしたがって、繰り返しではなく、次のコマンドを使用して前のメッセージを再試行できます。

$ git commit -m "$(cat .git/COMMIT_EDITMSG)"

または一般的な場合(たとえば、エイリアシングに適しています):

$ git commit -m "$(cat "$(git rev-parse --git-dir)/COMMIT_EDITMSG)")"

答え2

以前の(失敗した)コミットと同じコミットメッセージを使用して再送信してください。

git commit -F "$(git rev-parse --git-dir)/COMMIT_EDITMSG" 
  • コミットする前にテキストエディタでコミットメッセージを編集する機会がある場合は、-e--edit)オプションを追加してください。
  • 失敗したコミットが詳細なコミット(たとえば)の場合は、Gitが詳細なコミットに追加したコメントがコミットメッセージの一部と見なされないように追加できますgit commit --verbose--cleanup=strip

結合例 - テキストエディタで失敗したコミットメッセージを編集し、Gitがコミットする前に編集されたコミットメッセージをクリーンアップするようにします。

git commit -eF "$(git rev-parse --git-dir)/COMMIT_EDITMSG" --cleanup=strip

参照元:man git-commit:

-F <file>, --file=<file>
    Take the commit message from the given file. Use - to read the
    message from the standard input.
-e, --edit
    The message taken from file with -F, command line with -m, and from
    commit object with -C are usually used as the commit log message
    unmodified. This option lets you further edit the message taken
    from these sources.
--cleanup=<mode>
    This option determines how the supplied commit message should be
    cleaned up before committing. The <mode> can be strip, whitespace,
    verbatim, scissors or default.

    strip
        Strip leading and trailing empty lines, trailing whitespace,
        commentary and collapse consecutive empty lines.
    ...
FILES
       $GIT_DIR/COMMIT_EDITMSG
           This file contains the commit message of a commit in progress. If
           git commit exits due to an error before creating a commit, any
           commit message that has been provided by the user (e.g., in an
           editor session) will be available in this file, but will be
           overwritten by the next invocation of git commit.

(gitバージョン2.39.2でテスト済み)

関連情報