답변:
당신이 추가 할 경우 --preserve-merges
옵션 (또는 동의어를 -p
받는) git rebase -i
명령 다음 자식은 리베이스보다는 역사를 선형화 할 때 병합을 유지하기 위해 노력할 것입니다, 당신은뿐만 아니라 병합 커밋을 개정 할 수 있어야한다 :
git rebase -i -p HEAD~5
HEAD~5
수정하려는 커밋의 부모는 어디에 있습니까 (보통 sha1 ^).
--preserve-merges
은 지금--rebase-merges
그 주 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 일)vegard
casasnovas
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 초였습니다!).
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to