cherry-pick
명령어 : git cherry-pick <Commit1> <Commit2> <...>
현재 위치(HEAD) 아래에 있는 일련의 커밋들에 대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다.
cherry pick이란, 체리 한 바구니에서 제일 좋은 체리만 고르는 것에서 유래한 표현으로 ,일반적으로는 제일 좋은 걸 선별한다는 뜻으로 쓰인다고 합니다!
참고로 commit을 branch에서 다른 branch로 옮기는 건 아니고, 전체 history를 따지면 새로운 commit이 늘어나는 것입니다.
예시
현재 ‘브랜치 Y’를 개발하고 있는 상황에서 ‘브랜치 X’에 적용되어 있는 3개의 커밋을 가져와서 반영하고 싶은 상황입니다. 이럴 때, git cherry-pick 명령을 이용하면 됩니다.

$ git cherry-pick 555f8b4 8f618a0 480b6bb
or
$ git cherry-pick 555f8b4..480b6bb # 가져오고 싶은 범위의 첫번째와 마지막 커밋 해시 값
위의 명령어 결과 아래와 같이 적용됩니다.

예시2

위 3개의 브랜치에서 main branch로 C3 C5 C7을 가져오기 위해서
git cherry-pick C3 C4 C7
을 수행할 수 있고 그 결과는 아래와 같습니다.

-continue와 -abort 옵션
다른 브랜치의 커밋 사항을 가져오는 동작이다보니 수정사항이 현재 브랜치의 코드에 맞지 않는 경우가 있습니다.
이 경우 충돌 (conflict)가 발생합니다.
이 경우 두가지의 선택지가 있습니다.
1. -abort
$ git cherry-pick -abort
만약 cherry-pick을 중단하고 싶으면 -abort 옵션을 이용해 중단할 수 있습니다.
이 경우, cherry-pick 명령을 실행하기 전으로 코드가 돌아갑니다.
2. -continue
$ vi $file_path # 파일 수정
$ git add $file_path
$ git cherry-pick -continue
충돌이 발생한 코드를 에디터로 열어서 수정하고, 수정된 코드를 추가하고, git cherry-pick -continue 명령을 실행하면 충돌을 수정한 코드가 반영되고, cherry-pick이 재개됩니다.
💡 cherry-pick을 언제 쓰는게 좋을까?
같은 commit이 여러 번 쌓이는 일도 발생할 수 있기 때문에 cherry-picking이 가능한 상황에서 보통은 일반적인 merge를 사용하는 걸 선호한다고 합니다. 그렇다면 어떤 상황에서 쓰는게 좋을까요?
[버그수정]
A기능 개발을 완료 하고 B기능을 개발중인 상황,
알고보니 A 기능에 버그가 있다고 한다!
빠르게 버그 패치를 해서 내 브랜치에 commit 한다!
방금 commit 한 이 패치는 git cherry-pick을 통해
main branch에 바로 반영되었다!
[반영되지 않은 pr]
실수로 pull request를 merge하기 전에 닫아버렸다
하지만, 당황하지 않고 git cherry-pick을 통해 해당 commit을 가져옴으로써 살릴 수 있게 됐다 !
아래는 git의 여러가지 명령어를 실습 할 수 있는 사이트 입니다.
참고
'git' 카테고리의 다른 글
git 유용한 명령어 interactive rebase (1) | 2024.01.11 |
---|