[Git] cherry-pick: 커밋 하나만 분리해서 현재 브랜치에 연결

2022. 4. 21. 12:51Git

브랜치별 병합 용도

브랜치명 특징
feat/기능이름 각 개발자가 개발중인 브랜치
직접 커밋을 올림
main feat/기능이름 브랜치에서 개발 완료된 코드가 합쳐진 브랜치
출시 전인 베타 버전이라고 볼 수 있습니다.
직접 커밋을 올리지 않는다(병합을 통해서만 코드를 업데이트)
latest 실제 출시할 코드(대중에게 보여줄 완벽한 코드)를 올리는 브랜치.
[main] 브랜치에서 굵직한 개발이 끝나면 출시 시점에 [latest] 브랜치로 코드를 병합합니다.

위 표를 그림으로 표현하면 다음과 같습니다.

cherry-pick의 필요성

예를 들어 어제 출시한 코드가 담긴 [latest] 브랜치에 당장 고쳐야 하는 버그가 발생했다고 가정합니다. 개발자가 급하게 [main] 브랜치에서 [fix/tetx-bug] 브랜치를 따서 고치고 이를 [main] 브랜치에 병합했습니다. 이제 이를 [latest] 브랜치에 있는 다른 변경사항말고 딱 그 버그를 고친 커밋만 반영하고자 합니다. 아직 다른 기능은 출시할 시점이 아니기 때문입니다. 이와 같은 상황에서 체리픽(cherry-pick) 기능을 사용하면 내가 따길 원하는 체리(커밋)을 선택하고 [체리픽] 버튼을 클릭하게 쉽게 끝낼 수 있습니다.

 

1. cherry-pick : 다른 브랜치의 커밋 하나만 내 브랜치에 반영하기

[feat/a] 브랜치, [feat/b] 브랜치를 생성하고 [feat/a] 브랜치의 커밋 하나를 [feat/b] 브랜치에 반영하는 것을 실습하겠습니다.

 

1.1 [main] 브랜치를 기반으로 [feat/a] 브랜치 생성

1.2 [feat/a] 브랜치에 3개의 커밋을 생성, first.md 생성 및 작성 후 커밋

1.3 [feat/a], second.md 생성 및 작성 후 커밋

1.4 [feat/a] third.md 파일 생성 및 커밋

1.5 [main] 브랜치로 체크아웃 ->[main] 브랜치 기반 [feat/b] 브랜치 생성

 

1.6 [feat/b] featb.md 파일 생성 및 커밋

 

1.7 1.6단계를 마친 상황에서 [feat/b] 브랜치가 [feat/a] 브랜치의 '두번째 커밋 : 체리픽 실습하기' 커밋만을 가져와서 [feat/b] 브랜치에 반영하고자 합니다. [feat/a] 브랜치와 그냥 병합하면 'first.md 파일 추가' 커밋과 'third.md 파일 생성' 커밋도 같이 반영이 되므로 이 상황은 피하고 싶습니다. 이러한 상황에서 체리픽 기능을 사용합니다.

 

1.8 [feat/b] 브랜치 상태에서 체리픽을 원하는 커밋을 선택 -> 마우스 오른쪽 버튼 클릭 -> 체리픽 클릭 -> 확인 클릭

위 결과를 보면 [feat/b] 브랜치에 체피릭 실습하기 커밋이 반영된 것을 볼 수 있습니다.

 

References

source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저