Cherry-pick 은 빌리고, rerere 는 기억해
다른 branch 에서 commit 하나만 원하고 branch 전체 merge 는 안 하고 싶을 때. git cherry-pick <hash> 가 그 commit 이 도입한 변경을 가져다 현재 branch 위에 새 commit 으로 적용. 새 commit 은 source 와 다른 hash — 복사지 이동 아니야. 사용 사례: main 의 bug fix 를 release branch 로 backport, 폐기할 실험 branch 에서 유용한 commit 하나 끌어올리기, 장기 병렬 branch 사이로 fix 전파.
Cherry-pick 은 범위 가능 — git cherry-pick A..B 가 A 후부터 B 까지 모든 commit 을 순서대로 적용. Merge / rebase 처럼 conflict 가 동작 일시정지 — 해결, git add, git cherry-pick --continue. --abort 로 rewind. -x 는 메시지에 "(cherry picked from commit <hash>)" 추가 — branch 가로질러 cherry-pick 할 때 audit trail 이 source 가리키게 하는 데 무가치한 가치.
git rerere ("reuse recorded resolution") 은 장기 병렬 branch 있는 repo 의 무명 영웅. 활성화하면 해결한 모든 conflict 를 Git 이 기록. 다음에 같은 conflict 등장 — 같은 hunk, 양쪽 같은 내용 — 하면 Git 이 기록된 답으로 자동 해결. Main 과 주기적으로 merge 하는 maintenance branch 의 노동 절감 극적. git config --global rerere.enabled true 로 global 활성화 + 잊어, 절감이 조용히 쌓여.
조합이 maintenance 에서 빛나. main 에서 release branch 로 fix 10 개 backport 한다 치면. Rerere 없이는 main 이 그 후 refactor 한 줄 건드리는 모든 cherry-pick 이 새로운 수동 conflict. Rerere 켜면 각 패턴 한 번 해결, 같은 conflict 패턴 후속 cherry-pick 은 자동 해결. git rerere status 가 기록된 거 표시. git rerere clear 가 저장된 해결이 틀렸을 때 cache wipe.