전체 글 보기

Git cherry-pick 알아보기

profile icon

git cherry-pick은 특정 커밋을 선택적으로 다른 브랜치에 가져오는 명령어로, 버그 수정, 기능 이전, 릴리스 관리에 유용하다.

#Git
마지막 수정일:

git cherry-pick은 특정 커밋을 현재 branch로 가져오게 하는 명령어이다. 이름에서도 쉽게 알 수 있듯이 여러 커밋 중에서 특정 커밋(체리)만 따오는 행위라고 이해하면 쉽다.

cherry-pick 개념

모든 커밋은 고유한 식별자인 해시(hash) 값을 가진다. git cherry-pick은 이 해시 값을 사용해 특정 커밋을 현재 브랜치로 가져온다.

커밋 해시 설명
sh
git cherry-pick <commit-hash>

위 명령어를 실행하면 해당 커밋의 변경 내용이 현재 브랜치에 새로운 커밋으로 생성된다.

merge 없이 특정 커밋만 main 브랜치로 가져오는 예시를 살펴보자. 현재 main 브랜치의 로그는 다음과 같다.

cherry-pick 전 main 브랜치 로그

git cherry-pick 사용!

cherry-pick 명령어 실행

git cherry-pick 사용 후 브랜치 로그

cherry-pick 후 브랜치 로그

commit된 변경 사항을 main branch로 가져오고, HEAD가 cherry-pick 으로 가져온 commit을 가리키게 되었다.

여러 개의 커밋을 가져올 수도, 혹은 범위를 지정할 수도 있다.

sh
# 여러 개의 커밋을 개별적으로 선택
git cherry-pick <hash1> <hash2>

# 범위로 가져오기 (start는 제외, end는 포함)
git cherry-pick <start-commit>..<end-commit>

# 시작 커밋까지 포함하여 범위 가져오기
git cherry-pick <start-commit>^..<end-commit>

단순한 복사 외에도 실무에서 유용하게 사용할 수 있는 옵션들이다.

cherry-pick도 커밋 내역을 합치는 작업이므로 충돌이 발생할 수 있다.

충돌이 발생하면 충돌을 해결한 후 아래 명령어로 계속 진행한다.

sh
git cherry-pick --continue

상황에 따라 아래 옵션을 활용할 수 있다.

sh
git cherry-pick --abort
sh
git cherry-pick --skip

cherry-pick을 사용하면 동일한 변경 내용을 가진 새로운 커밋이 생성된다. 이는 커밋 히스토리를 파편화하거나, 나중에 해당 브랜치들을 다시 merge 할 때 중복된 내용으로 인해 혼란을 야기할 수 있다.

따라서 협업 규칙에 따라 꼭 필요한 경우에만 사용하도록 하자.

전체 글 보기