히스토리 정리
4. 응용 변형 예제
4.1 fixup 커밋을 만들고 자동으로 정리하기
작은 수정이 어느 커밋 것인지 알 때는 메시지를 찾아 sed 로 표시하는 대신 --fixup 을 씁니다.
git commit --fixup=<대상 커밋 해시>
git rebase -i --autosquash <대상 커밋 해시>^실행하면 fixup! feat: 카운터 기능 추가 커밋이 자동으로 대상 커밋 바로 뒤로 옮겨져 합쳐집니다. 편집 화면을 그대로 두면 되므로 GIT_SEQUENCE_EDITOR 조작 없이도 자동화할 수 있습니다.
4.2 cherry-pick 범위로 여러 커밋 한 번에 옮기기
git cherry-pick -x <첫 커밋>^..<마지막 커밋>중간에 대상 브랜치가 갖지 않은 함수를 고치는 커밋이 있으면 그 지점에서 멈추고 충돌이 납니다. 나머지는 git add 후 git cherry-pick --continue 로 이어갑니다.
4.3 cherry-pick -n 으로 여러 변경을 한 커밋에 모으기
git cherry-pick -n <해시1>
git cherry-pick -n <해시2>
git commit -m "묶은 메시지"각 cherry-pick 이 스테이징까지만 하고 멈추므로, 원하는 만큼 모은 뒤 한 번에 커밋합니다.
4.4 pull --rebase 를 팀 기본값으로 설정하기
git config pull.rebase true
git config --global pull.rebase true이후 git pull 만 실행해도 병합 커밋 없이 rebase 로 동작합니다. 이미 push 된 커밋을 rebase 하는 것이 아니라 로컬의 아직 공유되지 않은 커밋만 옮기므로 황금률에 어긋나지 않습니다.
4.5 rebase 후 push 는 항상 force-with-lease 로
git fetch origin
git push --force-with-lease origin <브랜치>--force 는 습관적으로 쓰지 않습니다. 동료가 그 사이 push 했다면 --force-with-lease 가 이를 감지해 거부하므로, fetch 로 내용을 확인한 뒤 다시 rebase 하고 push 합니다.