프로젝트를 진행하면서 서비스 배포 프로세스를 feature → dev → main
흐름으로 관리하고 있었어요. 새로운 기능은 feature 브랜치에서 작업한 뒤 dev 브랜치에 병합하고, 이후 dev 브랜치를 main에 머지해 최종 배포가 이뤄지는 구조였습니다.
그런데 문제가 하나 생겼습니다. 아직 사용자에게 공개하면 안 되는 기능과 바로 배포가 필요한 기능이 동시에 dev 브랜치에 합쳐져 버린 거예요. 이 상황에서 전체 dev를 main으로 올릴 수는 없으니, 꼭 필요한 기능만 빠르게 배포할 방법이 필요했습니다.
그때 선택한 방법이 바로 cherry-pick이었고, 이번 글에서는 그 사용 방법을 정리해보려고 합니다.
현재 dev 브랜치에는 총 5건의 새로운 feature 브랜치 작업이 merge되어 있는 상태였습니다.
하지만 이 중에서 저는 #1163 [FEAT] 청파제 기념 출석완료 토스트 메시지 문구 변경(#1164) 커밋만을 main에 바로 배포할 필요가 있었어요.
즉, dev 전체를 main으로 올릴 수는 없고, 필요한 특정 커밋만 main 브랜치로 가져와야 하는 상황이었죠.
원하는 커밋(기능)만 골라서 main으로 가져와 배포해보려 합니다.
main에서 릴리즈 브랜치 생성
git checkout main
git pull
git checkout -b release/2025-09-16
dev 브랜치에서 각 브랜치가 merge된 가져올 커밋 해시(SHA)
를 확인
GitHub에서 확인
명령어
git log dev --oneline
dev에서 필요한 커밋만 골라서 cherry-pick
# 커밋 여러 개 선택해서 릴리즈 브랜치에 체리픽
git cherry-pick -x <sha1> <sha2> <sha3> ...
# 예시
git cherry-pick -x a1b2c3d4 e5f6g7h8 ...
-x
옵션: (cherry picked from …) 라는 원본 커밋 정보도 메시지에 남아서 추적하기 용이충돌이 발생한다면
git add .
git cherry-pick --continue
(충돌이 없거나/충돌 해결 후) 테스트 후 원격 푸시
git push origin release/2025-09-16
예전에는 dev 브랜치에 merge된 내용은 모두 main으로 내려야 한다고 생각해서, 원하는 기능만 배포하고 싶어도 다른 기능까지 함께 배포할 수밖에 없었어요. 그런데 이제는 꼭 그렇게 하지 않아도 될 것 같아요~