git cherry-pick은 특정 커밋만 선택하여 현재 브랜치에 적용하는 Git 명령어입니다.
즉, 한 브랜치에서 특정 커밋만 골라서 다른 브랜치에 가져오는 기능을 합니다.
💡 언제 사용하면 좋을까?
•다른 브랜치에서 필요한 커밋만 가져오고 싶을 때
•버그 수정이 포함된 특정 커밋만 가져와 핫픽스(Hotfix)로 적용할 때
•전체 브랜치 병합(git merge) 대신, 특정 기능만 반영하고 싶을 때
✅ 2. git cherry-pick 기본 사용법
📌 (1) 특정 커밋을 현재 브랜치에 적용
git cherry-pick <커밋ID>
✅ 설명:
•<커밋ID>는 가져올 커밋의 해시값 (예: a1b2c3d)
•현재 체크아웃된 브랜치에 해당 커밋이 적용됨
🔹 예제
1.feature-branch에서 bug-fix 브랜치로 특정 커밋을 가져오려면:
git checkout bug-fix # 커밋을 적용할 브랜치로 이동 git cherry-pick a1b2c3d # 특정 커밋 가져오기
✅ 결과:
• feature-branch에 있는 a1b2c3d 커밋이 bug-fix 브랜치에 적용됨
✅ 3. 여러 개의 커밋을 한 번에 적용하기
git cherry-pick <커밋ID1> <커밋ID2> <커밋ID3>
✅ 설명:
•여러 개의 커밋을 한 번에 선택하여 적용 가능
🔹 예제
git cherry-pick a1b2c3d e4f5g6h i7j8k9l
✅ 결과:
•세 개의 커밋(a1b2c3d, e4f5g6h, i7j8k9l)이 현재 브랜치에 순서대로 적용됨
✅ 4. 연속된 커밋을 한 번에 적용 (.. 또는 ^ 사용)
연속된 커밋을 여러 개 한 번에 적용하고 싶다면 다음과 같이 사용합니다.
📌 (1) 특정 범위의 커밋을 한 번에 적용
git cherry-pick A..B
✅ 설명:
•A 이후부터 B까지의 커밋을 모두 현재 브랜치에 적용
💡 예제:
git cherry-pick a1b2c3d..e4f5g6h
✅ 결과:
•a1b2c3d 이후부터 e4f5g6h까지의 모든 커밋이 적용됨 (단, a1b2c3d는 제외)
📌 (2) ^를 사용하여 특정 커밋 포함
git cherry-pick A^..B
✅ 설명:
•A도 포함해서 B까지의 커밋을 가져옴
💡 예제:
git cherry-pick a1b2c3d^..e4f5g6h
✅ 결과:
•a1b2c3d부터 e4f5g6h까지의 커밋이 모두 적용됨
✅ 5. cherry-pick 중 충돌(Conflict) 해결 방법
📌 (1) 충돌이 발생했을 때 해결하는 방법
git cherry-pick <커밋ID>
🔹 출력 예시 (충돌 발생 시)
error: could not apply a1b2c3d... Fix issue #42 CONFLICT (content): Merge conflict in index.html
✅ 충돌 해결 후 진행 방법
1.충돌이 난 파일을 수정
2.git add . 로 변경된 파일을 스테이징
3. git cherry-pick –continue 실행
git add . git cherry-pick --continue
✅ 결과:
•충돌이 해결된 후 커밋이 정상적으로 적용됨
💡 리베이스 중 충돌 해결 방법과 비슷함!
✅ 6. cherry-pick 취소하는 방법
📌 (1) 적용한 cherry-pick 취소하기 (git cherry-pick –abort)
git cherry-pick --abort
✅ 설명:
•cherry-pick 도중 오류가 발생했거나, 취소하고 싶을 때 사용
📌 (2) 이미 적용한 cherry-pick을 취소 (git reset)
git reset --hard HEAD~1
✅ 설명:
•HEAD~1을 사용하여 최근 cherry-pick한 커밋을 삭제
🚀 7. cherry-pick vs merge vs rebase 차이점
방법 |
설명 |
장점 |
단점 |
git cherry-pick |
특정 커밋만 선택하여 적용 |
원하는 커밋만 골라서 적용 가능 |
충돌이 자주 발생할 수 있음 |
git merge |
전체 브랜치를 병합 |
충돌이 적고 브랜치 통합이 쉬움 |
불필요한 커밋까지 합쳐질 수 있음 |
git rebase |
커밋을 한 줄로 정리하여 병합 |
커밋 이력이 깔끔해짐 |
충돌 시 해결해야 할 부분이 많아질 수 있음 |
💡 언제 cherry-pick을 사용해야 할까?
•브랜치 전체가 아니라, 특정 커밋만 가져오고 싶을 때
•필요한 기능이나 버그 수정만 적용하고 싶을 때
•팀원과 협업 중인데, 불필요한 커밋까지 합치고 싶지 않을 때
답글 남기기