...
원하는 commit 가져오기
git을 이용해 코드 관리를 하다보면 커밋을 다른 브랜치에 잘못 하거나, 요구사항이 바뀌어 필요 없는 커밋이 생기거나, 코드 의존성(dependency) 때문에 다른 사람의 커밋 중 일부를 가져와야 하는 경우가 종종 생긴다.
이때 사용할수 있는 명령어가 cherry-pick 이다.
git cherry-pick
git cherry-pick 명령어는 특정한 commit 하나만 콕 찝어서 현재 HEAD가 가리키는 branch에 추가할 수 있게 해준다.
쉽게 말해서 다른 branch에 있는 여러개의 commit들 중, 원하는 commit을 지금 내 branch에 가져와서 commit 할 수 있는 것이다.
cherry pick이란, 체리 한 바구니에서 제일 좋은 체리만 고르는 것에서 유래한 표현이라고 한다.
일반적으로는 제일 좋은 걸 선별한다는 뜻으로 쓰인다.
참고로 commit을 branch에서 다른 branch로 옮기는 건 아니고, 전체 history를 따지면 새로운 commit이 늘어나는 것이다.
💡 cherry-pick은 언제 써야 할까?
유용하긴 하지만 cherry-pick이 항상 권장되는 것은 아니라고 한다.
같은 commit이 여러 번 쌓이는 일도 발생할 수 있기 때문에 cherry-picking이 가능한 상황에서 보통은 일반적인 merge를 사용하는 걸 선호한다고 한다.
그렇다면 cherry-pick은 어떤 상황에서 유용할까?
[팀으로 협업할 때]
만일 팀이랑 사이드 프로젝트를 진행하고 있다고 하자.
본인는 백엔드다. 현재 내가 맡은 기능이 프론트까지 더해졌을 때 어떻게 돌아가는지 확인하고 싶은데 프론트엔드를 맡은 동료가 지금 한창 작업 중이라고 한다. 근데 아까 CSS 파일을 완성해서 commit해 뒀다고 한다.
그럼 cherry-pick을 통해 그 commit 하나만 찾아서 내 branch에 가져오면 된다.
CSS만 입혀볼 수 있게 되는 것이다.
[버그 수정]
본인은 며칠 전 A 기능을 완성한 개발자다.
A가 끝나고 B 기능을 개발하는 중이었는데, 알고 보니 A 기능에 버그가 있다고 한다.
더 많은 유저들이 이 버그로 인한 현상을 겪기 전에 빠르게 버그 패치를 해서 내 branch에 commit한다.
방금 commit한 이 패치는 git cherry-pick을 통해 main branch에 바로 반영되었다.
[반영되지 않은 pr]
실수로 pull request를 merge하기 전에 닫아버렸다.
당황하지 않고 git cherry-pick을 통해 해당 commit을 가져옴으로써 살릴 수 있게 됐다.
$ git cherry-pick <commit여섯자리번호>
예를들어, 위 처럼 현재 당신의 코드는 X 브랜치에 있고
당신은 브랜치 Y의 커밋 중 76ae30ef와 13af32cc만 골라 현재 브랜치인 X에 적용하고 싶다고 가정 하자.
# 하나씩 해도 되고
$ git cherry-pick 76ae30ef
$ git cherry-pick 13af332cc
# 인라인으로 한꺼번에 해도 된다.
$ git cherry-pick 76ae30ef 13af32cc
체리 픽을 하여 브랜치 X에 적용하면, 이전 커밋 수정사항이 X브랜치에 적용된다.
물론 겹치는 내용이 있으면 당연히 conflict가 일어나고, 수정 후 새로 커밋해야 한다.
git cherry-pick –continue / –abort
가끔 cherry-pick하려는 커밋과 내 브랜치 사이에 conflict이 발생 할 수있다.
그런 경우 두 가지 옵션이 있다.
⭕ Conflict를 해결하고 cherry-pick을 진행시킨다.
- Conflict을 해결하기 위해 코드를 수정한다.
- git add <path> 명령어로 수정된 코드를 올린다. (커밋은 다시 할 필요 없다.)
- git cherry-pick –continue 명령어를 사용하면 다시 진행이 시작 된다.
⭕ cherry-pick을 중단한다.
- git cherry-pick –abort 명령어를 사용해 cherry-pick을 중단하면, cherry-pick을 하기 전 상태로 돌아 갈 수 있다.
git cherry-pick merge
만약 merge commit을 cherry-pick하고 싶다면 다음과 같은 명령어를 사용하면 된다
$ git cherry-pick -m 1 <merge_commit_hash>
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.