[GitHub 100일 챌린지] Day 68 - Git Cherry-pick 선택적 커밋
100일 챌린지 Day 68 - 특정 커밋만 선택적으로 가져오는 Cherry-pick을 배웁니다.
배울 내용
- Cherry-pick 개념
- 특정 커밋 가져오기
- 충돌 해결
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 →
