Git : 'git reset'후 커밋 메시지를 재사용 / 보존하는 방법은 무엇입니까?


103

Git 사용자로서 나는 정기적으로 상황을 발견하고 수정 커밋에 맞지 --amend않거나 rebase -i수정 커밋에 맞지 않는 방식으로 하나 이상의 커밋을 재 작업해야합니다 . 일반적으로 나는 다음과 같이 할 것입니다.

git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?

나는 현명하게 구성된 커밋 메시지를 매우 진지하게 생각합니다. 일반적으로 변경에 대한 참조 및 근거가있는 더 큰 텍스트를 포함합니다. 지금까지 정렬되지 않은 git reflog, git log복사 및 붙여 넣기 프로세스 를 통해 오래된 커밋 메시지를 복구하는 데 오랜 시간이 걸리는 프로세스에 상당히 짜증이났습니다 .

이 문제를 해결하는 것이 더 좋은가요? 내 커밋이 두 개 이상이면 어떻게 될까요?

편집 : 이것에 대해 조금 생각한 후 내가 찾고있는 것은 수정 / 수정 커밋이 적절하지 않은 커밋 메시지에 대한 git stash 와 같은 기능 이라고 생각합니다 .


2
당신이 한 모든 것이 있다면 git reset head~1, 당신의 이전 커밋 메시지는 reflog?

예-하지만 어떻게 복사 및 붙여 넣기없이 메시지를 재사용 할 수
있습니까

요즘은 그냥 gitk열어보세요. 그렇게하면 reflog를 사용할 필요조차 없습니다. 또는 rev-parse <branch>재설정 전에 해시를 가져오고 ibizaman의 답변을 사용하는 데 사용하십시오.
cst1992

답변:


143

git reset,이 한 줄은 그것을 할 수 있습니다 :

git commit --reuse-message=HEAD@{1}

또는 더 짧습니다.

git commit -C HEAD@{1}

@ user2718704에서 제공하는 다른 옵션을 사용할 수 있습니다 .


6
더 짧게 :git commit -C@@{1}
Phu Ngo

2
이것은 reflog의 환상적인 사용법입니다
David Mann

22
재설정 후 ORIG_HEAD가 설정됩니다. 나는 git commit --reuse-message=ORIG_HEAD가장 분명하다.
Scott Jacobsen 2019

45

"git commit"명령을 실행할 때 다음 옵션을 확인해야합니다.

재사용하려면

--reuse-message=<commit>

재사용시 편집하려면

--reedit-message=<commit>

작성자를 변경하려면

--reset-author

1
가장 포괄적 인 답변을 제공했기 때문에이를 새로운 솔루션으로 표시했습니다. 이 솔루션은 여전히 ​​내 '검색'문제를 완전히 해결하지 못합니다.
bentolor

9

해킹, 수정, 해킹하고 실행할 수 있다면 왜 재설정하십시오 git commit --amend --no-edit. 따라서 원래 커밋 메시지를 유지합니다.

여러 커밋에 대해 작동하게하려면 최신 변경 사항으로 임시 커밋을 만든 다음 대화식 리베이스를 사용하여 이전 커밋의 커밋 메시지를 유지하면서 새 임시 커밋으로 이전 커밋 (좋은 커밋 메시지 포함)을 스쿼시합니다.


2
대화식 리베이스를 수행 할 때 fixup명령을 사용하여 이후 커밋이 이전 커밋을 수정하고 수정 커밋에서 메시지를 버리고 원래 커밋 메시지를 자동으로 사용한다고 선언 할 수도 있습니다 .
qqx

예를 들어 강제 업데이트 된 풀 요청을 다시 병합하려는 경우입니다. 또는 커밋이 마지막이 아니고 HEAD를 기반으로 쉽게 수정할 수 없으며 다시 실행하기가 더 쉬운 경우.
bentolor

@BenTebulin 음, 대화 형 리베이스를 사용하면 지정된 커밋 범위에서 커밋을 수정할 수 있습니다. 수정해야하는 것은 엄격하게 HEAD 커밋이 아닙니다.
mart1n

@ mart1n에서 편집 해 주셔서 감사합니다 rebase -i. 그 맥락에서 결코 사용하지 않았습니다. 재 병합과 같은 나머지 경우에는 다른 답변이 내 질문에 더 적합하므로 답변으로 표시했습니다.
bentolor 2013-06-02

Intellij에는 아직 커밋되지 않은 파일에서만 작동하는 범위가 있습니다. 예를 들어 intellij가 파일을 린트하도록 지시 할 수 있도록 파일을 커밋되지 않은 상태로 재설정 한 다음 동일한 메시지로 해당 파일을 다시 커밋하는 것이 유용합니다. intellij의 범위 제한으로 인해 수정이 작동하지 않습니다.
David Mann

5

git commit --reset-author -c <commit>커밋 메시지를 편집 및 현재 시간과 함께 재사용하려면을 고려할 수 있습니다.


고마워요-이것은 제가 찾고 있던 것에 아주 가깝습니다.
bentolor 2013-06-02
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.