[Git] 커밋을 다른 브랜치로 옮기기 ( cherry-pick )
🐳 문제 상황
우리 회사에서는 기능을 추가할 때 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 에서 옮기고 싶은 커밋을 우 클릭하면 됩니다 !
IDE 를 사용하는 방법은 어렵지 않으니 생략하고 CLI 를 통해 작업하는 방법을 알아보겠습니다.
1. 커밋 해시 확인
cherry-pick 할 커밋의 해시를 알아야 합니다.
커밋 해시는 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 의 기능을 활용합시다 .. 정신 건강에 이롭습니다.