공개하기 전에 amend, fixup, autosquash로 다듬어
실제 코딩 과정은 지저분해. 기능 commit 뒤 주석 오타를 찾고, 빠뜨린 test를 보태고, docstring까지 고치게 되지. 이 과정을 네 commit으로 그대로 push하면 이력이 산만해져. 공개하기 전에 로컬 이력을 정리해 main에 올라갈 때는 한 관심사가 한 이야기로 읽히게 해. 그때 쓰는 도구가 --amend, --fixup, --autosquash야.
git commit --amend는 가장 최근 commit을 이전 변경과 현재 staged 변경을 합친 새 commit으로 교체해. 원본 hash 대신 새 hash가 그 자리에 와. 파일을 add하지 않았거나 message를 고쳐야 할 때 알맞아. amend는 message 편집기를 열고, --no-edit를 붙이면 기존 message를 그대로 써.
git commit --fixup <hash>는 나중에 대상 commit 안으로 합칠 보정 commit을 만들어. 일반 commit처럼 다룰 수 있지만 '나중에 대상 commit을 amend할 보정'이라는 metadata가 붙어. git rebase -i --autosquash는 그 표시를 읽어 fixup commit을 대상 옆으로 옮기고 squash하도록 interactive rebase를 배열해. 손으로 순서를 바꾸거나 message를 다시 쓸 필요가 없어. git config --global rebase.autosquash true를 두면 모든 interactive rebase에 적용돼.
작업 중 '이것도 고쳐야지' 하는 변경이 생길 때마다 원본 commit에 대해 git commit --fixup해. merge 전이나 review 뒤 git rebase -i --autosquash main을 실행하면 Git이 이력을 의도한 논리 단위로 조립해. 검토자는 깔끔한 version을 보고 main에는 과정의 잡음이 남지 않아.