미숑이의 블로그
블로그 홈소개

© 2025 Ryu Mi Sung. All rights reserved.

목차

들어가기 전에
상황 설명
개념 톺아보기
작업
1) 릴리즈 브랜치 만들고 cherry-pick
마치며
Git/GitHub

git cherry-pick

류미성
2025년 9월 16일

들어가기 전에

프로젝트를 진행하면서 서비스 배포 프로세스를 feature → dev → main 흐름으로 관리하고 있었어요. 새로운 기능은 feature 브랜치에서 작업한 뒤 dev 브랜치에 병합하고, 이후 dev 브랜치를 main에 머지해 최종 배포가 이뤄지는 구조였습니다.

그런데 문제가 하나 생겼습니다. 아직 사용자에게 공개하면 안 되는 기능과 바로 배포가 필요한 기능이 동시에 dev 브랜치에 합쳐져 버린 거예요. 이 상황에서 전체 dev를 main으로 올릴 수는 없으니, 꼭 필요한 기능만 빠르게 배포할 방법이 필요했습니다.

그때 선택한 방법이 바로 cherry-pick이었고, 이번 글에서는 그 사용 방법을 정리해보려고 합니다.


상황 설명

현재 dev 브랜치에는 총 5건의 새로운 feature 브랜치 작업이 merge되어 있는 상태였습니다.

하지만 이 중에서 저는 #1163 [FEAT] 청파제 기념 출석완료 토스트 메시지 문구 변경(#1164) 커밋만을 main에 바로 배포할 필요가 있었어요.

즉, dev 전체를 main으로 올릴 수는 없고, 필요한 특정 커밋만 main 브랜치로 가져와야 하는 상황이었죠.

깃허브 커밋 목록

개념 톺아보기

CherryPick 이미지 설명

작업

원하는 커밋(기능)만 골라서 main으로 가져와 배포해보려 합니다.

1) 릴리즈 브랜치 만들고 cherry-pick

  1. main에서 릴리즈 브랜치 생성

    git checkout main
    git pull
    git checkout -b release/2025-09-16
  2. dev 브랜치에서 각 브랜치가 merge된 가져올 커밋 해시(SHA)를 확인

    1. GitHub에서 확인

      커밋 해시(SHA) 확인 방법

    2. 명령어

      git log dev --oneline
  3. dev에서 필요한 커밋만 골라서 cherry-pick

    # 커밋 여러 개 선택해서 릴리즈 브랜치에 체리픽
    git cherry-pick -x <sha1> <sha2> <sha3> ...
     
    # 예시
    git cherry-pick -x a1b2c3d4 e5f6g7h8 ...
    • -x 옵션: (cherry picked from …) 라는 원본 커밋 정보도 메시지에 남아서 추적하기 용이
  4. 충돌이 발생한다면

    git add .
    git cherry-pick --continue
  5. (충돌이 없거나/충돌 해결 후) 테스트 후 원격 푸시

    git push origin release/2025-09-16

마치며

예전에는 dev 브랜치에 merge된 내용은 모두 main으로 내려야 한다고 생각해서, 원하는 기능만 배포하고 싶어도 다른 기능까지 함께 배포할 수밖에 없었어요. 그런데 이제는 꼭 그렇게 하지 않아도 될 것 같아요~