어떤 이유로 커밋이 실패하면 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에서 테스트됨)

관련 정보