이전에는 사용한 적 없는데, 회사에서 소스관리하면서 가장 많이 사용하는 명령어 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
2.2.2 checkout
commit을 체리픽할 대상 브랜치로 checkout
git checkout <after_branch>
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) 이던 상태가 종료되었습니다
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
'Programming > Git' 카테고리의 다른 글
[Git] 원격 저장소까지 반영된 commit 되돌리기(Git Reset) (0) | 2022.09.25 |
---|---|
[Github] Issue 및 Issue Branch 생성하여 프로젝트 관리하기 (0) | 2022.09.24 |
[Git] 윈도우에 Git 설치 및 사용자 이름/이메일 등록 (0) | 2022.09.18 |
[Github] IntelliJ에서 Github 사용하기 (인텔리제이에서 깃허브 사용하기) (0) | 2021.10.03 |
[Github] README란? README.md 작성법 (5) | 2021.10.01 |