Git으로 협업하다 보면, 전체 브랜치를 병합하는 대신 특정 커밋 하나만 다른 브랜치에 옮기고 싶을 때가 있습니다.
이럴 때 사용하는 강력한 도구가 바로 git cherry-pick입니다.
이번 포스팅에서는 cherry-pick의 개념부터 실전 사용법, 주의할 점까지 자세히 알아봅니다.
📌 목차
- git cherry-pick이란?
- cherry-pick 사용법
- 실제 사례로 보는 cherry-pick
- 시각적 흐름 예시
- 충돌(Conflict) 처리 방법
- 유용한 옵션들
- 주의사항 및 실전 팁
- 마무리
1. git cherry-pick이란?
git cherry-pick은 특정 커밋 하나(또는 여러 개)를 선택해서 현재 브랜치 위에 복사해 적용하는 명령어입니다.
마치 과일 바구니에서 필요한 체리만 "쏙쏙" 골라 담는다는 의미에서 이름이 붙었어요!
✅ 브랜치 병합 없이 커밋 하나만 선택적으로 적용할 수 있다는 게 가장 큰 특징입니다.
2. cherry-pick 사용법
기본 문법
git cherry-pick <커밋 해시>
여러 커밋:
git cherry-pick <커밋1 해시> <커밋2 해시> ...
범위로 지정:
git cherry-pick <시작 커밋 해시>^..<끝 커밋 해시>
주의: ^ 기호는 시작 커밋 전 커밋부터 포함시킨다는 의미
3. 실제 사례로 보는 cherry-pick
예제 상황
main: A---B---C
\\
feature: D---E---F
이때 E만 main 브랜치에 적용하고 싶다면?
git checkout main
git cherry-pick <E의 커밋 해시>
결과:
main: A---B---C---E'
- E'는 E 커밋과 같은 변경 내용을 가진 새로운 커밋
- 기존 히스토리는 유지되고, feature 브랜치는 영향을 받지 않음
4. 시각적 흐름 예시
Before:
main: A---B---C
feature: \\---D---E---F
After cherry-pick E:
main: A---B---C---E'
- E'는 E의 복사본 (새 커밋)
- merge처럼 전체 병합이 아니라 단일 커밋만 가져옴
5. 충돌(Conflict) 발생 시
체리픽도 결국 다른 브랜치의 변경 사항을 적용하는 것이기 때문에 충돌이 발생할 수 있어요.
충돌 발생 시 처리
# 충돌 해결 후
git add <수정한 파일>
git cherry-pick --continue
중단하려면:
git cherry-pick --abort
6. 유용한 옵션들
옵션 설명
-x | 커밋 메시지에 "cherry picked from commit xxx" 문구 추가 |
--edit | 커밋 메시지를 수정할 수 있도록 열어줌 |
--no-commit | 커밋하지 않고 변경사항만 staging 영역에 적용 |
--continue | 충돌 해결 후 cherry-pick 계속 진행 |
--abort | cherry-pick 작업 취소 |
예시:
git cherry-pick -x <커밋 해시>
7. 주의사항 및 실전 팁
✅ 언제 쓰면 좋을까?
- 다른 브랜치에서 수정한 버그 픽스만 가져오고 싶을 때
- 기능 브랜치에서 실수로 잘못된 브랜치에 커밋했을 때 복사하고 싶을 때
- 긴급한 수정 사항만 메인 브랜치에 바로 반영할 때
⚠️ 주의점
- 히스토리가 재작성되므로 커밋 해시가 달라집니다.
- 동일한 커밋을 여러 번 cherry-pick하면 충돌 또는 중복 커밋 가능성 있음
- 공동 작업 중이라면 팀원과 합의 후 사용
8. 마무리
git cherry-pick은 브랜치를 병합하지 않고 커밋만 뽑아 쓸 수 있는 매우 유용한 명령어입니다.
특히 긴급한 상황, 빠른 수정 적용이 필요할 때 매우 강력하게 쓰일 수 있어요.
단, 히스토리 재작성이므로 신중하게, 그리고 팀의 커밋 흐름 전략에 맞게 사용하세요!
...끝!
'Tools > Git' 카테고리의 다른 글
[Git] 브랜치 전략: 효율적으로 협업하기 (0) | 2025.04.24 |
---|---|
[Git] Squash 정리 - 지저분한 커밋 정리하는 법 (0) | 2025.04.21 |
[Git] Init 정리 - Git 저장소의 첫 시작, 어떻게 동작할까? (0) | 2025.04.16 |
[Git] Merge와 Rebase 비교 (0) | 2025.04.15 |
[Git] Rebase 정리 - Merge보다 히스토리가 깔끔한 이유 (2) | 2025.04.14 |
댓글