종종 git 커밋을 올리고 난 뒤, 빼먹은 코드나 까먹은 작업이 기억나서 바로 새 커밋으로 올릴 때가 있다.
하지만, github 저장소에서 commit history를 보면 너무 더러워서 참을 수가 없다.
사실, 자주 그러는것도 아니고 막상 그런 행위를 한다고 하더라도 귀찮아서 rebase 작업은 잘 안하다가, 가끔 너무 참을 수 없을 때, 구글링을 해서 고치곤 하는데, 이러다보니 매번 까먹는다.
고로 정리해봐야겠다.
먼저 one->two->three->four(마지막커밋)순으로 커밋이 있다고 친다.
그 다음,
git rebase -i HEAD~4
를 입력하면
최근 커밋을 포함한 4개의 커밋이 리스트에 등장한다.
여기서, 3개의 커밋인 two, three, four 커밋을 one커밋으로 합친다고 하면,
'pick'을 's'나 'squash'로 변경 후 ESC키->:wq 입력하면 저장 후 vim 입력창을 빠져나오게 된다.
그리고 다시 vim 입력창이 뜨는데, 합친 커밋 메시지를 어찌할 지 적는 부분이다.
i키를 눌러 입력모드 전환 후,
나는 이렇게 작성했다.
다시 ESC키->:wq를 입력하고 저장 후 빠져나오면
성공적으로 rebase했다는 메시지가 출력된다.
이제 이 작업을 원격 저장소에 최종적으로 push 해야하는데,
일반적인 git push origin master 명령어를 실행하면 [rejected] 가 출력되어 입구컷을 때린다.
git push -f origin master
(-f: force, 압도적인 힘으로) 명령어로 진행한다.
고러면 이렇게 1개의 커밋으로 합쳐진 것을 확인할 수 있다.
당연히 공동 프로젝트에서 구성원들과 합의되지 않은 채로 master(main) 브랜치에 이런 짓을 했다간 즉시 곤봉찜질.