본문 바로가기
개발 도구/Git

다른 브랜치에서 내가 원하는 커밋만 가져오고 싶을 때(git cherry-pick)

by ♥︎해이나♥︎ 2022. 12. 19.
반응형

다른 브랜치에서 내가 원하는 커밋만 골라서 가져올 수 있는 커맨드가 있다. 알아두면 정말 유용하기 때문에 블로그에 정리해 두려고 한다.

 

체리픽 타이틀

 

체리픽(cherry-pick)이 필요한 상황

test 브랜치에서 두개의 작업을 수행하고 각각 커밋했다. (커밋 순서 : Add get_Sum_ver1 function → Add get_Sum_ver2 function) 그리고 나서 다시 premium 브랜치로 이동해서 test 브랜치를 합치려고 했는데(머지) 두번째 커밋은 반영하지 않고 첫번째 커밋만 반영해야 하는 상황이 되었다.

 

test 브랜치에서 작업 후 커밋

 

내가 원하는 커밋만 골라서 가져오기

위의 상황에서 최종 버전이 아닌 내가 원하는 커밋만 골라서 합칠 수 있는 커맨드가 있다. 

 

git cherry-pick 커밋아이디

 

체리 픽은 어떤 제품이나 서비스의 가성비가 좋고 인기 있는 특정 요소만을 골라서 합리적으로 소비하려는 현상을 가리키는 경제 용어이다. 지금 공부하는 것과 관련은 없지만 이 용어가 더 궁금하다면 아래 링크를 클릭하면 된다. 

https://namu.wiki/w/%EC%B2%B4%EB%A6%AC%ED%94%BC%ED%82%B9

 

체리피킹 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

다시 예제로 돌아가서... 첫번째 버전인 Add get_Sum_ver1 function 만을 합치기 위해서는 해당 커밋 아이디를 알아야 할 필요가 있다. 커밋 히스토리를 조회해서 해당하는 아이디를 찾았다.

 

git log --pretty=oneline --all --graph

프로젝트 모든 브랜치의 커밋 히스토리 그래프로 조회

 

그 다음 git cherry-pick f6a9 라는 커맨드를 실행했다. 그러면 컨플릭트(conflict)가 발생하는데 해결방법은 다른 컨플릭트와 동일하다.

 

git cherry-pick

 

충돌이 발생한 코드를 알맞게 수정한 후 다시 Staging Area로 옮기고 커밋해서 마무리! 내가 원하는 코드만 premium 브랜치로 잘 옮겨진 것을 확인할 수 있었다.

 

충돌한 내용을 수정한 후에 다시 커밋

 

체리픽(cherry-pick) 취소하기

완료한 체리픽을 취소하는 방법도 간단하다. 머지를 취소하는 커맨드는 git merge --abort 라고 예전에 한 번 소개했던 적이 있는데, 체리픽의 경우도 --abort 옵션을 사용하면 쉽고 빠르게 이전 코드로 돌아갈 수 있다.

 

git cherry-pick --abort
반응형

댓글