# cherry-pick
---
## 1. Git Cherry-pick이란?
`git cherry-pick`은 다른 브랜치의 ****특정 커밋 하나만 골라**** 현재 브랜치에 적용하는 명령어이다.
> "딱 필요한 커밋 하나만 따로 복사해오고 싶을 때" 사용한다.
---
## 2. 기본 문법
```bash
git cherry-pick <커밋 해시>
```
예:
```bash
git cherry-pick a1b2c3d
```
---
## 3. 시각화 예시
### 🎯 목적: `feature` 브랜치의 특정 커밋 `C3`만 `main` 브랜치로 가져오기
```
📌 기존 상태
main: A---B
\
feature: C1---C2---C3---C4
```
```bash
git checkout main
git cherry-pick C3
```
```
📌 결과 상태
main: A---B---C3'
\
feature: C1---C2---C3---C4
```
> 🔄 `C3'`는 `C3`와 동일한 내용이지만 ****다른 커밋 해시****를 가진 복제 커밋한다.
---
## 4. 여러 커밋 cherry-pick
```bash
git cherry-pick <시작해시>^..<끝해시>
```
예:
```bash
git cherry-pick C2^..C4
```
→ C2, C3, C4를 현재 브랜치로 모두 적용
---
## 5. 충돌 발생 시
- 충돌 발생 시 수동 해결 필요
```bash
git add .
git cherry-pick --continue
```
- 중단하고 원래대로 되돌릴 때:
```bash
git cherry-pick --abort
```
---
## 6. 사용 예시 요약
상황
| 설명
|
---|
🔧 버그 수정
| `main`에서 수정한 버그 커밋을 `release` 브랜치에도 적용
|
🎯 기능 분리
| 여러 기능 중 하나만 따로 적용
|
🧪 실험
| 실험용 브랜치에 특정 수정만 적용해서 테스트
|
---
## 7. cherry-pick vs merge vs rebase
명령어
| 적용 범위
| 히스토리 영향
| 특징
|
---|
`merge`
| 전체 브랜치
| O (병합 커밋 생성)
| 원본 히스토리 유지
|
`rebase`
| 전체 브랜치
| O (히스토리 수정)
| 깔끔한 직선형 히스토리
|
`cherry-pick`
| 개별 커밋
| O (복제 커밋 생성)
| 선택 적용 가능
|
---
## 8. 주의사항
- 커밋 해시는 같아 보여도 내부적으로 ****새 커밋(C3′)**** 이 생성됨
- 여러 번 cherry-pick 시 ****중복 충돌****이 발생할 수 있음
- 동일 커밋을 여러 브랜치에서 사용 시 히스토리 혼동 가능성 있음
---