git rebase -i는 최근 커밋 목록을 편집기로 열어 순서를 바꾸고, 합치고, 메시지를 고치게 해 주는 명령이다. 리뷰 전에 "작업하면서 생긴 지저분한 커밋"을 읽기 좋은 단위로 다듬을 때 쓴다.
git rebase -i HEAD~3
# pick a1b2c3 결제 API 추가
# fixup d4e5f6 오타 수정
# reword 789abc 테스트 추가squash: 앞 커밋과 합치고 두 메시지를 모아 다시 쓴다fixup: 앞 커밋과 합치고 이 커밋의 메시지는 버린다reword: 내용은 두고 메시지만 고친다.edit는 그 커밋에서 멈춰 내용을 고치게 한다git commit --fixup <해시>후git rebase -i --autosquash를 쓰면 fixup 줄이 자동으로 배치된다
이미 푸시한 커밋을 정리했다면
히스토리가 바뀌었으므로 강제 푸시(force push)가 필요하다. 이때 --force 대신 --force-with-lease를 쓰면 그사이 남이 올린 커밋을 덮어쓰지 않는다. 다만 혼자 쓰는 브랜치에서만 하고, 공유 브랜치는 리베이스하지 않는다는 원칙이 우선이다.
잘못 합쳤다면 reflog로 날린 커밋 되살리기로 리베이스 이전 상태로 돌아갈 수 있다. 커밋을 어떤 단위로 남길지는 커밋 메시지와 원자적 커밋에서 다룬다.
출처: git-rebase 문서: Interactive mode · git-push --force-with-lease