git cherry-pick으로 특정 커밋만 가져오다 충돌난 경우
문제 발생
핫픽스를 main에서 만든 뒤 아직 배포 전인 release 브랜치에도 같은 수정을 반영해야 했는데, 두 브랜치 전체를 merge하면 다른 미완성 기능까지 섞여버리는 상황이었습니다.
원인 분석
git cherry-pick <commit-hash>은 특정 커밋 하나(또는 여러 개)의 변경 내용만 골라서 현재 브랜치 위에 새 커밋으로 적용합니다. 브랜치 전체를 합치는 merge/rebase와 달리, 딱 필요한 변경만 옮길 수 있습니다.
다만 cherry-pick도 결국 diff를 적용하는 것이므로, 대상 브랜치의 해당 부분이 원본 커밋을 만들 당시와 달라져 있으면 merge와 마찬가지로 충돌이 발생할 수 있습니다.
해결 방안
- 커밋 해시를 확인하고 cherry-pick을 실행합니다.
git checkout release
git cherry-pick abc1234- 충돌이 나면 Git이 충돌난 파일을 표시합니다. 일반 merge 충돌과 똑같이 파일을 열어
<<<<<<</=======/>>>>>>>마커를 직접 해결합니다.
# 충돌 해결 후
git add <해결한 파일>
git cherry-pick --continue- cherry-pick을 취소하고 원래 상태로 돌아가고 싶다면
--abort를 씁니다.
git cherry-pick --abort- 여러 커밋을 연속으로 가져와야 한다면 범위로 지정할 수 있습니다(
A..B는 A는 제외, B는 포함).
git cherry-pick abc1234..def5678- 흔한 실수: cherry-pick한 커밋은 원본과 다른 해시를 가진 새 커밋입니다. 나중에 두 브랜치를 merge할 때 Git이 이 둘을 같은 변경으로 인식하지 못해 다시 충돌이 나거나, 최악의 경우 같은 수정이 중복 적용될 수 있습니다. 여러 릴리스 브랜치에 같은 핫픽스를 반복적으로 cherry-pick해야 하는 워크플로우라면, 장기적으로는 브랜치 전략 자체를 재검토할 신호일 수 있습니다.
댓글0
댓글을 남기려면 로그인이 필요해요. 로그인
아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.