개요
Git을 이용해 코드를 관리하다 보면 다른 브랜치에 적용된 커밋을 가져와 적용해야 하는 경우가 발생한다. 그런 경우 git rebase 또는 cherry-pick을 많이 사용하는데, 이 글에서는 cherry-pick에 대해 정리한다.
rebase : 2022.11.20 - [Git] rebase - 브랜치 base 재지정
cherry-pick
cherry pick이란 체리 한 바구니에 좋은 체리만 고르는 것에서 유래한 단어로, 좋은 것을 선별한다는 뜻으로 쓰인다.
git에서 cherry-pick 명령은 다른 branch에서 발생한 여러 commit 중, 특정 commit에서 발생한 수정 사항을 브랜치에 반영할 수 있도록 한다. cherry-pick 명령어 뒤에 반영할 commit hash만 지정해 주면 된다.
git cherry-pick <COMMIT>
cherry-pick은 commit을 branch에서 다른 branch로 옮기는 것이 아니라 새 commit이 늘어나는 것이다. 따라서 같은 commit이 여러 번 쌓일 수도 있기 때문에 cherry-pick이 가능하다면 merge를 사용하는 것을 더 선호하는 것 같다.
사용 예시
예로 들어 다음과 같은 상태의 레포지터리가 있다고 하자. main 브랜치에 modify test가, main_detached 브랜치에 Add cherry가 커밋되어 있다.
이 상태에서 main 브랜치에 Add cherry 커밋을 반영하고 싶다. 먼저 반영할 때 충돌날 여지가 없는지 확인하기 위해 커밋에서 발생한 수정사항을 살펴본다.
git checkout <BRANCH>
git log
git show <COMMIT>
반영에 문제가 없다면 반영할 브랜치로 돌아와 cherry-pick을 시도한다.
git cherry-pick <COMMIT>
정상적으로 반영이 잘 되었다. 반영한 직후의 branch graph는 아래와 같다.
참고 문서
https://git-scm.com/docs/git-cherry-pick
https://www.scaler.com/topics/git/git-cherry-pick/
[GIT] ⚡️ 원하는 commit 가져오기 (git cherry-pick)