힘내 : 병합 커밋의 메시지를 편집 / 변경하는 방법은 무엇입니까? 커밋 ( HEAD) 인

병합 커밋 메시지를 편집하거나 변경하려면 어떻게합니까?

git commit --amend마지막 커밋 ( HEAD) 인 경우 작동 하지만 이전에 오는 경우 어떻게 HEAD됩니까?

git rebase -i HEAD~5 병합 커밋을 나열하지 않습니다.



답변

당신이 추가 할 경우 --preserve-merges옵션 (또는 동의어를 -p받는) git rebase -i명령 다음 자식은 리베이스보다는 역사를 선형화 할 때 병합을 유지하기 위해 노력할 것입니다, 당신은뿐만 아니라 병합 커밋을 개정 할 수 있어야한다 :

git rebase -i -p HEAD~5

답변

그 주 git1.7.9.6을 시작 , (그리고 git1.7.10 +) git merge자체는 항상 편집기를 트리거 는 병합에 세부 사항을 추가 할 수.

git merge $tag주석이 달린 태그를 병합하려면 ” “는 대화식 편집 세션 중에 항상 편집기를 엽니 다. v1.7.10 시리즈는 이전 스크립트가이 동작을 거부 할 수 있도록 환경 변수 GIT_MERGE_AUTOEDIT를 도입했지만 유지 관리 트랙에서도이를 지원해야합니다.

또한 GIT_MERGE_AUTOEDIT오래된 스크립트 가이 동작을 거부 할 수 있도록 환경 변수 를 도입했습니다 .

Git 1.7.10 예상 “을 참조하십시오 .

최근 Git 메일 링리스트 에 대한 토론에서 Linus는 이것이 Git 역사 초기에 디자인 실수 중 하나라는 점을 인정했습니다.
1.7.10 이상에서 대화식 세션에서 실행되는 git merge 명령 (예 : 표준 입력과 표준 출력이 터미널에 연결됨)은 병합 결과를 기록하기위한 커밋을 만들기 전에 편집기를 열어서 사용자는 충돌 병합을 해결 한 후 사용자가 실행하는 git commit 명령과 같이 병합을 설명 할 수 있습니다.

리누스는 말했다 :

그러나 실제로 어떻게 작동하는지 깊이 신경 쓰지 않습니다. 주된 문제는 git이 병합 메시지를 너무 쉽게 만들 수 없다는 것입니다.
그 중 일부는 더 단순한 관용구라고 생각 합니다. “git merge”에 대해 기본적으로 편집기를 시작하지는 않지만 “”에 대해서는 수행합니다 git commit.
이는 디자인 실수였으며 실제로 병합에 메모를 추가하려면 추가 작업을 수행해야 함을 의미합니다. 그래서 사람들은하지 않습니다
.


Git 2.17 (Q2 2018) 이전에는 ” git rebase -p“병합 커밋의 로그 메시지가 엉망이되어 수정되었습니다.

Gregory Herrero (“)의 commit ed5144d (2018 년 2 월 8 일)를 참조하십시오 .
제안 : Vegard Nossum ( )Quentin Casasnovas ( ) . ( Junio ​​C Hamano의해 병합 커밋 8b49408 , 2018 년 2 월 27 일)
vegardcasasnovas
gitster

rebase -p: 호출 할 때 잘못된 커밋 메시지 수정 git merge.

커밋 dd6fb00 ( ” rebase -p: git
merge
2018 년 1 월, Git 2.16.0-rc2를 호출 할 때 수정 인용 “) 이후 , 병합 커밋의 커밋 메시지는 ‘ git rev-parse --sq-quote‘를 실행하는 서브 쉘을 사용하여 merge 명령으로 전달됩니다 .

이 서브 쉘 주위에 큰 따옴표가 필요하므로 git merge명령에 줄 바꾸기가 유지됩니다 .

이 패치 전에 다음과 같은 병합 메시지가 나타납니다.

"Merge mybranch into mynewbranch

Awesome commit."

된다 :

"Merge mybranch into mynewbranch Awesome commit."

rebase -p.


Git 2.23 (2019 년 2 분기)에서 ” merge -c“중 ” “명령어 git rebase --rebase-merges는 새로운 병합을 생성하거나 기존 병합을 교체 할 필요가없는 경우에도 로그 메시지를 편집 할 수있는 기회를 제공합니다 (즉, 빨리 감기) ), 그렇지 않았습니다.
어느 것이 수정되었습니다.

Phillip Wood ( )의 commit 6df8df0 (2019 년 5 월 02 일)을 참조하십시오 . (의해 병합 Junio C 하마노 – 커밋 c510261 13 유월 2019)phillipwood
gitster


답변

knittl https://stackoverflow.com/a/7599522/94687에 의한 기본 명령 만 사용하는 또 다른 좋은 대답 :

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

또는 더 나은 (보다 정확한) 최종 리베이스 명령 :

git rebase <sha of merge> previous_branch --onto HEAD

BTW, 기본 명령을 사용하면 CPU를 너무 많이 사용하지 않고 Git이 다음에 커밋 할 커밋 목록에 대한 생각을 마칠 때까지 알 수없는 시간을 기다리게하는 멋진 “기능”이있을 수 있습니다 git rebase -p -i HEAD^^^^(이러한 명령은 필자의 경우 마지막으로 약 4 초가 걸린 것처럼 병합으로 마지막 커밋 목록은 약 4 초였습니다!).


답변

git merge --edit
비 대화식 병합의 경우에도 주석을 제공 할 수 있습니다.

git merge --edit --no-ff
개발 브랜치에서 rebasing하고 빨리 감기하지 않고 병합하여 git flow를 따르는 경우 유용 할 수 있습니다.


답변

현재 Git 버전 (Mai 2020) :

git rebase -i -r <parent>,

다음 편집기에서 교체 merge -C ...merge -c ....

리베이스 작업 중에 편집기에서 커밋 메시지를 열어서 변경할 수 있습니다.

힌트 를 위해 VonC 에 감사합니다 .


답변

git rebase -i HEAD~5명령은 편집기를 나타납니다. 지정된 커밋 (이 경우 5 개)을 나열합니다. 첫 번째 열에는 pick모든 커밋마다 포함 됩니다. 그냥 교체 pick와 함께 reword그 편집기와 가까운 편집기를 + 저장. 그런 자식은 모든 커밋 당신이 변경된 경우 편집기를 나타납니다 pickreword당신이 (가) 커밋 메시지를 편집 할 수 있습니다.