Git | GitHub

[Git] 커밋을 다른 브랜치로 옮기기 ( cherry-pick )

후뿡이 2024. 7. 24. 00:58

Chat-gpt를 이용해 생성한 이미지입니다.

 

🐳 문제 상황

우리 회사에서는 기능을 추가할 때 feature branch를 사용하고 있다.

실수로 feature 브랜치를 만들지 않고 develop 브랜치에서 작업 후 커밋을 했다면 어떻게 feature 브랜치로 커밋을 옮길 수 있을까 ?

 

이때 사용할 수 있는 기능이 git 의 cherry-pick 기능이다 !!

 

🐳 cherry-pick 이란 ?

cherry-pick 명령어는 이름 그대로 “체리 고르기”에서 유래되었다고 합니다.

체리를 하나하나 골라 담는 것처럼, Git에서도 특정 커밋을 선택적으로 다른 브랜치에 적용할 때 사용됩니다.

cherry-pick을 통해 필요한 커밋만을 “고르고” 원하는 브랜치에 반영할 수 있습니다 !

 

🐳 cherry-pick 이 필요한 경우

위에서 설명했던 예시처럼 다른 브랜치에 실수한 경우에 옮기는 경우 외에도 아래의 상황에도 cherry-pick 기능을 사용하면 좋습니다.

 

1. 버그 수정 적용: 긴급한 버그 수정을 hotfix 브랜치에서 진행한 후, 이 커밋을 main 브랜치와 다른 관련 브랜치에 적용할 때 사용하면 유용합니다.

2. 브랜치 정리: 브랜치를 병합하는 대신, 일부 커밋만 다른 브랜치에 포함시켜 브랜치 히스토리를 더 깔끔하게 유지하고 싶을 때 사용하기도 합니다.

🐳 cherry-pick 적용 방법

편리한 IDE( JetBrain 등 ) 를 사용하시는 경우에는 GUI 로 cherry-pick 기능을 제공하니 해당 기능을 사용하시면 됩니다 !

git log 에서 옮기고 싶은 커밋을 우 클릭하면 됩니다 !

intellij cherry-pick

 

IDE 를 사용하는 방법은 어렵지 않으니 생략하고 CLI 를 통해 작업하는 방법을 알아보겠습니다.

1. 커밋 해시 확인

cherry-pick 할 커밋의 해시를 알아야 합니다.

커밋 해시는 git log 명령을 사용하여 확인할 수 있습니다.

git log 를 통한 커밋 해시 확인

 

git log 를 실행하면 commit 해시 값을 확인할 수 있습니다.

이 해시값을 통해서 cherry-pick 을 실행하니 메모장에 기입해 둡시다.

 

2. 타겟 브랜치로 이동

cherry-pick 할 커밋의 해시값을 구했다면 해당 커밋을 옮기 브랜치로 이동합시다.

$ git checkout target-branch

 

3. cherry-pick 명령 실행

$ git cherry-pick 3905cc56ff4bc6480adae9612f4e3c1fe7b48b45

 

위의 명령어를 실행하면 위의 다른 브랜치의 커밋을 target-branch 로 가져올 수 있습니다.

커밋을 옮겨왔으니 다음에 해야 할 일은 무엇일까요 ?

 

4. 변경사항 푸시

커밋을 옮겨왔으니 해당 브랜치를 원격 저장소에 푸시해 줍시다.

$ git push origin target-branch

 

푸시까지 했으면 이제 cherry-pick 기능을 완료했습니다 !

 

커밋을 다른 브랜치로 옮기기 참 쉽죠 ?

 

🐳 추가

cli 를 이용하는 경우에 깃 충돌이 발생할 수 있습니다.
이때는 ... IDE 의 기능을 활용합시다 .. 정신 건강에 이롭습니다.