정신없이 깃 커밋을 하다보면 하나의 기능이 너무 여러 개의 커밋으로 쪼개져 있는 상황이 발생합니다. 다음과 같이 README.md를 수정하는 6개의 커밋이 있다고 칩시다.
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Create README.md
커밋 기록에 이렇게 나와있으면 지저분하기 때문에 커밋을 하나로 합치면 좋을 것 같습니다.
마지막으로부터 6개의 커밋을 합칠 것이므로 git reset --soft HEAD~개수
명령어를 사용합니다. 그러면 커밋들이 합쳐지는데 최종적으로 git commit으로 커밋하면 됩니다.
git reset --soft HEAD~6
git commit -m "커밋메시지"
git rebase
를 사용하는 방법도 있습니다. 저희가 마지막 6개 커밋을 합치길 원하므로 다음과 같이 입력합니다.
git rebase -i HEAD~6
그러면 vim 에디터로 연결되는데 합칠 커밋들 앞에 붙은 pick을 두 번째 것부터 전부 squash로 바꾸면 됩니다. 예를 들어 다음과 같이 6개 의 커밋이 있다면
pick ccfbab3 Create README.md
pick ccfbab3 Update README.md
pick ccfbab3 Update README.md
pick ccfbab3 Update README.md
pick ccfbab3 Update README.md
pick ccfbab3 Update README.md
두 번째 것부터 전부 squash로 바꿉니다. 첫 번째 것은 pick이어야 합니다(합칠 대상 커밋입니다)
pick ccfbab3 Create README.md
squash ccfbab3 Update README.md
squash ccfbab3 Update README.md
squash ccfbab3 Update README.md
squash ccfbab3 Update README.md
squash ccfbab3 Update README.md
그러고나서 :wq
를 눌러 저장하고, 다시 커밋메시지를 수정한 후 :wq
로 저장을 하면 됩니다.