Programming/Git

[Git] Cherry-pick 변경사항 다른 브랜치에 반영하기 / 충돌(Conflict) 해결

728x90

 

이전에는 사용한 적 없는데, 회사에서 소스관리하면서 가장 많이 사용하는 명령어 cherry-pick❗

사수님이 '체리픽' 알아두라고 했을 땐

체리..?🍒잘못들었나보다 그게 뭐람 했었는데 ㅋㄷㅋㄷ 잘 쓰는 중입니다 😉

 

 

1. Cherry-pick

다른 브랜치의 commit을 특정 브랜치에 적용할 때 사용하는 명령어

git cherry-pick <commit_id>

 

프로젝트에서 개발 브랜치에 commit하고 해당 기능이 잘 동작하는지 확인한 후에는 운영 브랜치에도 반영을 해야 하는데,
이 상황에서 다른 commit들로 인해 브랜치를 통째로 merge하지 못하거나 하는 등의 상황이 있죠


그럴 때 하나의 commit 만을 다른 브랜치로 반영할 수 있는 명령어 ! 🍒

 

 

 

2. cherry-pick 사용법

 

2.1. 변경사항 commit

git add .
git commit -m "'commit-1' into master"
git push

 

 

 


2.2. cherry-pick 대상 브랜치로 checkout 

 

2.2.1 commit id 복사

commit id를 사용하여 cherry-pick 할 예정이기 때문에 checkout 전 미리 복사해두기!

git log 명령어로 commit 번호 확인 후 복사

git log

git log

 

2.2.2 checkout

commit을 체리픽할 대상 브랜치로 checkout

git checkout <after_branch>

git checkout

 

 

 


2.3. cherry-pick 

 

2.3.1 cherry-pick

cherry-pick 하면서 메세지를 수정하기 위해 -e option을 사용했습니다

git cherry-pick -e 4f1f513a88420ed18f2e041ff61ec7f5ec0828b3

 

2.3.2 message 수정

-e 옵션을 사용하면 편집기가 열리면서 commit message를 수정할 수 있습니다

 

2.3.3 cherry-pick 완료 🌟

편집기에서 메세지 수정을 완료하면 cherry-pick 완료!

push 하여 원격 저장소에도 내용을 반영합니다

git push

 

 

 


3. cherry-pick 중 Conflict 해결

cherry-pick의 source 브랜치와 target 브랜치가 수정 위치가 겹친다면,

다음 사진처럼 Confilct가 발생할 수 있습니다

cherry-pick 을 취소하거나 충돌을 해결할 수 있습니다

 

3.1 cherry-pick 중단하기

다음 명령어로 cherry-pick을 중단할 수 있습니다

git cherry-pick --abort

다음 사진처럼 (prd|CHERRY-PICKING) 이던 상태가 종료되었습니다

cherry-pick --abort

 

 

3.2 Conflict 해결하기

다음 사진처럼 CHERRY-PICKING 상태에서 충돌 해결한 파일을 열어 충돌 소스를 확인/수정합니다

(충돌을 해결할 때에는 기존 소스를 실수로 변경시킬 수 있기 때문에 조심히!)

Confilct가 발생한 파일을 친절하게 알려주었네요

 

3.2.1 Confilct 발생 소스 수정

다음처럼 소스를 열어 <<<<<<< HEAD(현재 브랜치 소스) 와 >>>>>>> d0189c4 ('commit-2' into master) (cherry-pick 한 소스) 소스를 수정합니다

 

master에서 수정한 내용을 반영하기 위해 다음 사진처럼 수정한 후 저장했습니다

 

 

3.2.2 cherry-pick 계속하기

다음 명령어로 수정사항을 add하고  cherry-pick을 이어 진행시킵니다

원격 저장소에 push 하면 반영 완료 🌟

git add .
git cherry-pick --continue
git push

 

 

 

 

 

728x90