[Git] cherry-pick

cherry-pick다른 브랜치에 있는 커밋을 현재 작업하고 있는 브랜치에 적용시킬 수 있는 명령어이다.

사용 예시

  • 작업한 내용을 모두 reset 할 때, 온전히 살리고 싶은 커밋이 있다면 그 커밋들만 cherry-pick 하는 경우
  • A와 B가 동시에 작업이 진행되고 있을 때, A에 작업된 특정 커밋이 B에도 필요한 것처럼 코드 의존성이 있는 경우

위 예시들은 rebase 로도 가능하지만 두번째 예시와 같이 다른 브랜치에 있는 커밋을 현 브랜치에 가져오는 경우는 그 브랜치를 현 브랜치에 merge 후 rebase 해야하므로 번거롭다.

cherry-pick 사용 방법


git cherry-pick 명령어는 아래와 같다.

git cherry-pick <commit-hash> <commit-hash> ... 

cherry-pick 을 공부하기 위해 아래의 커밋 트리를 예로 들어보려고 한다.

_2021-03-13__9 46 56

현재 feature/B 브랜치에 checkout 되어 있고, 브랜치 feature/A 브랜치의 커밋 중 a0b3bb56a97320f0 를 현재 브랜치인 feature/B 에 적용하려고 한다.

cherry-pick 을 이용하여 feature/A 에 있는 커밋을 feature/B 브랜치에 적용할 수 있다.

current branch -> feature/B
git cherry-pick a0b3bb56
current branch -> feature/B
git cherry-pick a97320f0

또는 한번의 명령어로 여러 개의 커밋을 가져와 적용하고 싶을 때는 아래와 같이 할 수 있다.

git cherry-pick a0b3bb56 a97320f0

위와 같이 cherry-pick 을 사용하여 feature/A 브랜치에 있는 커밋을 feature/B 브랜치에 적용하면 feature/A, feature/B 브랜치의 커밋 트리는 아래처럼 변경된다.

스크린샷 2021-03-13 오전 9 48 45

cherry-pick 할 때 conflict 가 발생한다면,


cherry-pick 하려는 커밋과 내 브랜치의 내용과 conflict 가 발생한다면 아래와 같이 2개의 옵션이 있다.

conflict 를 해결하고 cherry-pick 을 이어서 진행한다.

  • conflict 를 해결한다.
  • git add 명령어로 conflict 를 해결하기 위해 수정된 코드를 stage 로 올린다.
  • git cherry-pick --continue 명령어로 cherry-pick 을 이어서 진행한다.

cherry-pick 을 중단하고 cherry-pick 을 하기 전으로 돌아간다.

  • git cherry-pick --abort 명령어를 사용한다.

참고 링크


Written by@sujin-park
항상 배우는 자세 갖추기 💻

GitHubLinkedIn