• Blog
  • Projects
  • Resume
profile_image

Git 커밋 히스토리가 꼬였을 때 해결법

Git

2025.04.18

왜 이렇게 꼬이게 될까?

꼬임 사례

git pull로 기준 브랜치를 가져오면서 merge commit이 생기고,
그 상태에서 다시 git rebase를 시도하면 커밋 히스토리가 꼬임.


꼬임의 전개

  1. pull로 병합 커밋이 생긴 상태에서
  2. 나중에 rebase를 해버리면
  3. merge commit + rebase로 새로 생긴 커밋들이 혼재됨

그래서 어떤 일이 벌어지냐면...

같은 커밋이 여러 번 등장하는 것처럼 보일 수 있음
PR에 불필요한 커밋들이 잔뜩 따라붙음 (기준 브랜치 히스토리까지 딸려옴)
Author는 다른 사람인데, Committer는 나 (리베이스 수행자)
GitHub에서 올린 PR이나 작업한 브랜치를 보면...
"다른 사람이 작성했지만, 내가 뭔가 수정을 가한 흔적" 처럼 남게 됨



정리 과정

(선택) 커밋 정리

git rebase --root -i # 루트 커밋부터 전체 히스토리를 정리할 때
## OR ##
git rebase HEAD~숫자 -i # 최근 <숫자>개 커밋만 정리할 때
  • 커밋 목록이 뜨면 필요 없는건 drop, 여러 커밋 합치려면 squash

기준 브랜치 기준으로 rebase

git rebase -i origin/기준브랜치이름 # 예) git rebase -i origin/main
  • 여기서 "기준 브랜치"는 PR을 보낼 대상 브랜치 (보통은 main 혹은 develop)
  • -i 옵션으로 커밋들을 선택적으로 수정할 수 있음
  • 이 단계에서는 모든 커밋을 edit 상태로 바꾸기

각 커밋마다 author/committer 덮어쓰기

GIT_COMMITTER_NAME="이름" \
GIT_COMMITTER_EMAIL="이메일" \
git commit --amend --author="이름 <이메일>" --no-edit  && git rebase --continue
  • 위 명령을 모든 커밋마다 반복
  • 이렇게 하면 Author도, Committer도 전부 "이름 <이메일>"으로 바뀜

해결!
다하고나서 git push --force는 필수..!


(참고) 커밋 ID / Author / Committer 확인

git log --pretty=format:"%h | %an <%ae> | %cn <%ce> | %s"