핵심 답변
git cherry-pick은 다른 브랜치의 특정 커밋만 골라서 현재 브랜치에 적용하는 명령어입니다. 마치 체리를 하나씩 골라 따듯이, 원하는 커밋만 선택해서 가져옵니다.

기본 사용법:

# 특정 커밋 하나 가져오기
git cherry-pick <commit-hash>

# 예시: abc123 커밋을 현재 브랜치에 적용
git cherry-pick abc123

# 여러 커밋 가져오기
git cherry-pick abc123 def456 ghi789

# 범위로 가져오기 (A 다음부터 B까지)
git cherry-pick A..B

언제 사용하나요?

알아야 할 배경 개념

커밋(Commit)이란?
Git에서 커밋은 코드 변경사항의 스냅샷입니다. 각 커밋은 고유한 해시(SHA-1)를 가지며, 부모 커밋에 대한 참조와 변경 내용을 포함합니다.

브랜치 간 코드 이동 방법 비교

cherry-pick의 원리
cherry-pick은 선택한 커밋의 변경사항(diff)을 복사해서 현재 브랜치에 새 커밋으로 만듭니다. 원본 커밋을 이동시키는 게 아니라 복제하는 것이므로, 새 커밋은 다른 해시를 갖습니다.

더 깊이 파고들기

주요 옵션들

# 커밋 메시지 수정하며 가져오기
git cherry-pick -e <commit>

# 커밋하지 않고 변경사항만 스테이징
git cherry-pick -n <commit>
git cherry-pick --no-commit <commit>

# 원본 커밋 정보를 메시지에 추가
git cherry-pick -x <commit>
# 결과: (cherry picked from commit abc123...)

# Merge 커밋을 cherry-pick할 때 부모 지정
git cherry-pick -m 1 <merge-commit>

충돌(Conflict) 해결

cherry-pick 중 충돌이 발생하면:

# 1. 충돌 파일 확인
git status

# 2. 충돌 해결 후 스테이징
git add <resolved-files>

# 3. cherry-pick 계속 진행
git cherry-pick --continue

# 또는 취소하고 원래 상태로
git cherry-pick --abort

# 현재 커밋 건너뛰기 (여러 커밋 중일 때)
git cherry-pick --skip

실무 시나리오: 핫픽스 적용

# 상황: main 브랜치에 긴급 버그 수정을 했는데,
# 이걸 develop 브랜치에도 적용해야 함

# 1. main에서 버그 수정 커밋 확인
git log main --oneline
# abc123 fix: critical payment bug

# 2. develop 브랜치로 이동
git checkout develop

# 3. 해당 커밋만 가져오기
git cherry-pick abc123

# 4. 완료! develop에도 버그 수정이 적용됨

주의사항

cherry-pick vs rebase vs merge

상황 권장 명령 이유
브랜치 전체를 합치고 싶음 merge 히스토리 보존, 안전함
깔끔한 선형 히스토리 원함 rebase 커밋 재정렬, 깔끔함
특정 커밋 1-2개만 필요 cherry-pick 선별적 적용 가능
핫픽스를 여러 브랜치에 전파 cherry-pick 정확히 같은 수정만 적용
시각화
git cherry-pick 동작 원리 BEFORE feature A B C 이 커밋! D main X Y Z HEAD cherry-pick C AFTER feature A B C D 원본 유지 main X Y Z C' 새 커밋! (다른 해시) 💡 C의 변경사항을 복사해서 main에 새 커밋 C'로 생성

다이어그램 설명:

함께 알면 좋은 개념