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

git cherry-pick (원하는 commit 가져오기)

by 횰쓰 2022. 7. 31.

 

 

 

cherry pick이란, 체리 한 바구니에서 제일 좋은 체리만 고르는 것에서 유래한 표현이라고 한다.
일반적으로는 제일 좋은 걸 선별한다는 뜻으로 쓰인다. 

 

git을 이용해 코드 관리를 하다보면 커밋을 다른 브랜치에 잘못 하거나, 요구사항이 바뀌어 필요 없는 커밋이 생기거나, 코드 의존성(dependency) 때문에 다른 사람의 커밋 중 일부를 가져와야 하는 경우가 종종 생긴다.

 

git cherry-pick 명령어는 특정한 commit 하나만 콕 찝어서 현재 HEAD가 가리키는 branch에 추가할 수 있게 해준다.

쉽게 말해서 다른 branch에 있는 여러개의 commit들 중, 원하는 commit을 지금 내 branch에 가져와서 commit 할 수 있는 것이다.

 

참고로 commit을 branch에서 다른 branch로 옮기는 건 아니고,

전체 history를 따지면 cherry-pick한 새로운 commit이 늘어나는 것이다.

 

 


git cherry-pick 

$ git cherry-pick <commit번호>

 

 

예를들어, 위 처럼 현재 코드는 X 브랜치에 있고

브랜치 Y의 커밋 중 76ae30ef와 13af32cc만 골라 현재 브랜치인 X에 적용하고 싶다고 가정하자.

 

# 하나씩 해도 되고
$ git cherry-pick 76ae30ef
$ git cherry-pick 13af332cc
 
# 인라인으로 한꺼번에 해도 된다.
$ git cherry-pick 76ae30ef 13af32cc

 

 

Cherry-pick을 하여 브랜치 X에 적용하면, 이전 커밋 수정사항이 X브랜치에 적용된다.

물론 겹치는 내용이 있으면 당연히 conflict가 일어나고, 수정 후 새로 커밋해야 한다.

 

 

 

git cherry-pick -continue/ -abort

 

가끔 cherry-pick하려는 커밋과 내 브랜치 사이에 conflict이 발생할 수 있다.

그런 경우 두 가지 옵션이 있다. 

 

  •  Conflict를 해결하고 cherry-pick을 진행시킨다.
    1. Conflict을 해결하기 위해 코드를 수정한다.
    2. git add <path> 명령어로 수정된 코드를 올린다. (커밋은 다시 할 필요 없다.)
    3. git cherry-pick –continue 명령어를 사용하면 다시 진행이 시작 된다.

 

  • cherry-pick을 중단한다.
    1. git cherry-pick –abort 명령어를 사용해 cherry-pick을 중단하면, cherry-pick을 하기 전 상태로 돌아갈 수 있다.

 

 

'개발도구 > Git' 카테고리의 다른 글

git filter-branch  (0) 2022.10.23
git remote branch 가져오기  (0) 2022.07.31
git remote add (원격저장소 추가)  (0) 2022.07.31
git branch -d (브랜치 삭제하기)  (0) 2022.07.03
강제 (force) push 수행하기  (0) 2022.07.03

댓글