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을 사용해야 할까?

브랜치 전체가 아니라, 특정 커밋만 가져오고 싶을 때

필요한 기능이나 버그 수정만 적용하고 싶을 때

팀원과 협업 중인데, 불필요한 커밋까지 합치고 싶지 않을 때