포스트

[GitHub 100일 챌린지] Day 68 - Git Cherry-pick 선택적 커밋

[GitHub 100일 챌린지] Day 68 - Git Cherry-pick 선택적 커밋

100일 챌린지 Day 68 - 특정 커밋만 선택적으로 가져오는 Cherry-pick을 배웁니다.

배울 내용

  1. Cherry-pick 개념
  2. 특정 커밋 가져오기
  3. 충돌 해결

1. Cherry-pick이란?

cherry-pick은 다른 브랜치의 특정 커밋만 현재 브랜치에 적용하는 명령어입니다. 브랜치 전체를 merge하지 않고 필요한 변경 하나만 가져올 때 사용합니다.

1
2
3
# feature 브랜치의 특정 커밋만 main에 적용
git switch main
git cherry-pick abc1234

예를 들어 feature/payment 브랜치에는 여러 실험 커밋이 있지만, 그중 버그 수정 커밋 하나만 release 브랜치에 넣어야 할 수 있습니다. 이때 merge를 하면 원치 않는 실험 코드까지 들어올 수 있으므로 cherry-pick이 적합합니다.


2. 언제 사용하면 좋을까?

대표적인 상황은 세 가지입니다.

상황 설명
핫픽스 전파 main에 들어간 버그 수정을 release 브랜치에도 적용
일부 기능만 이동 큰 feature 브랜치에서 안전한 커밋만 가져오기
실수 복구 잘못된 브랜치에 만든 커밋을 올바른 브랜치로 옮기기

단, 같은 커밋을 여러 브랜치에 cherry-pick하면 커밋 해시는 새로 만들어집니다. 나중에 merge할 때 같은 변경이 중복으로 보일 수 있으므로 남용하지 않는 것이 좋습니다.


3. 기본 사용법

1
2
3
4
5
6
7
8
9
# 단일 커밋
git cherry-pick abc1234

# 여러 커밋
git cherry-pick abc1234 def5678

# 충돌 해결 후
git add .
git cherry-pick --continue

커밋 해시는 git log --oneline으로 찾습니다.

1
git log --oneline --decorate --graph --all

커밋을 적용하기 전 변경 내용만 확인하고 싶다면 git show를 사용합니다.

1
git show abc1234

4. 실전 활용

1
2
3
4
5
6
# 핫픽스를 여러 브랜치에 적용
git switch develop
git cherry-pick hotfix-commit

git switch release
git cherry-pick hotfix-commit

잘못된 브랜치에서 커밋한 경우에도 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
# 실수로 main에서 커밋함
git log --oneline -1
# abc1234 Add profile card

# 올바른 브랜치로 이동해 커밋 적용
git switch feature/profile
git cherry-pick abc1234

# main에서는 되돌리기
git switch main
git reset --hard HEAD~1

공유된 main에서는 reset --hard 대신 git revert를 고려해야 합니다. 이미 push한 기록을 강제로 바꾸면 다른 사람의 작업을 망가뜨릴 수 있습니다.


5. 충돌 처리와 중단

cherry-pick 중 충돌이 나면 일반 merge 충돌처럼 해결합니다.

1
2
3
4
git status
# 충돌 파일 수정
git add conflicted-file.js
git cherry-pick --continue

적용을 포기하고 원래 상태로 돌아가려면 --abort를 사용합니다.

1
git cherry-pick --abort

커밋은 적용하되 바로 커밋하지 않고 수정 내용을 확인하고 싶다면 --no-commit도 유용합니다.

1
2
3
git cherry-pick --no-commit abc1234
git diff --staged
git commit -m "Apply selected profile fix"

정리

완료 체크:

  • Cherry-pick으로 커밋을 가져올 수 있다
  • 여러 브랜치에 같은 수정을 적용할 수 있다
  • 충돌이 났을 때 --continue--abort를 사용할 수 있다
  • cherry-pick이 merge와 다른 상황에 쓰인다는 것을 설명할 수 있다

핵심 요약:

  • git cherry-pick 커밋해시 - 특정 커밋만 적용
  • git cherry-pick --continue - 충돌 해결 후 계속
  • git cherry-pick --abort - 적용 중단
  • 핫픽스 전파와 잘못된 브랜치 커밋 이동에 유용

다음: Day 69 - Git Reflog


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.