[Git] git cherry-pick

이수정·2022년 12월 8일
0

다른 브랜치에 적용된 특정 커밋을 가져와서 내 브랜치에 적용하고 싶은 경우에 사용한다. (여러 개를 가져올 수도 있다.)
💡 git cherry-pick [commit hash]


# cherry-pick 기본 사용법

[1] 실습을 위한 커밋 로그 만들기

  • main 브랜치 - "파일m" 커밋 로그 생성
  • topic 브랜치 - "파일 t1", "파일 t2" 커밋 로그 생성


[2] cherry-pick 실습

git cherry-pick [commit hash]

💡 cherry-pick으로 topic 브랜치의 "파일t2" 커밋을 main 브랜치로 가져오자.
💡 그리고 git log를 보면 main 브랜치의 HEAD가 topic 브랜치에서 가져온 "파일t2"를 가리키고 있다.






# cherry-pick 충돌 발생 시 해결법

git rebase나 merge와 동일하게 가져오려는 브랜치의 커밋 내용이 현재 브랜치의 코드와 맞지 않으면 충돌이 발생할 수 있다. 충돌 발생 시 아래의 2가지 방법을 선택할 수 있다.
1. cherry-pick 작업을 중지
2. 충돌 상황을 해결하고 다시 cherry-pick 작업을 진행

[1] --abort

git cherry-pick --abort

[2] --continue

제일 먼저, 충돌이 발생한 파일 수정 후 아래의 명령어 실행

git add .
git cherry-pick --continue

  • 예시

두 브랜치(main, topic)에서 common.txt를 모두 수정 후 main 브랜치에서 cherry pick으로 topic의 common.txt를 수정한 커밋을 가져오면 충돌이 발생할 것이다.
그러면 충돌을 직접 해결해주고 --continue 옵션으로 작업을 이어나가보자.

[1] main, topic 브랜치에서 common.txt 파일을 모두 수정한 후 커밋을 한다.

[2] cherry-pick으로 main 브랜치로 topic 브랜치의 커밋을 가져온다. 이 때, 충돌이 발생한다.

💡 vi 편집기로 열어 충돌 난 부분 중 한 부분을 선택하고 --continue 옵션으로 다시 cherry-pick 작업 수행한다.
💡 cherry-pick이 다시 수행되서 main의 HEAD가 topic에서 가져온 커밋으로 가 있는 것을 볼 수 있다.

💡 추가) 충돌 해결 후 다시 cherry-pick을 하면 원하는 커밋 로그를 남길 수 있다.

profile
개발 공부 기록

0개의 댓글