07. 브랜치간-커밋이동

깃(Git) 버전 관리 시스템에서 여러 작업을 분리하여 진행할 때 특정 브랜치(Branch)에서 작성한 일부 커밋(Commit)만을 선별하여 다른 브랜치로 가져와야 하는 경우가 발생한다. 전체 브랜치 이력을 합치는 병합(Merge)과 달리, 원하는 커밋만을 지정하여 복사하는 기능을 체리픽(Cherry-pick)이라고 부른다. 이는 여러 과일 중 원하는 체리만을 쏙 골라내는 동작과 유사하다. 개발용 브랜치에서 커밋 후 배포용 브랜치로 특정 커밋만을 옮겨 반영하고자 할 때는 아래의 절차와 명령어를 사용한다.

1. 작업 시나리오

작업을 시작하기 전 기준이 되는 브랜치 구성과 복사할 대상 커밋 정보를 확인한다. 개발용 브랜치에서 완료된 작업 중 배포에 필요한 단 하나의 커밋만을 지정하여 대상 브랜치로 옮기는 상황을 정의한다.

  • 개발용 브랜치명 – dev
  • 배포용 브랜치명- main
  • 커밋메시지 (번호) – “완료” (b538c0f)

위 시나리오에서는 dev 브랜치에서 작성된 b538c0f 해시 식별자를 가진 커밋을 배포용인 main 브랜치에 그대로 복사하여 반영한다.

2. 작업 순서

체리픽 명령을 실행하기 전에 먼저 커밋을 적용받을 목적지 브랜치로 작업 공간을 전환해야 한다. 깃에서는 git switch 명령어를 사용하여 현재 활성화된 브랜치를 변경한다.

  1. 현재 브랜치는 dev 이다
  2. 커밋을 옮기고 싶은 브랜치은 main으로 이동한다.
git switch main

이 명령어는 로컬 저장소의 작업 위치를 dev에서 main 브랜치로 전환한다. 만약 작업 공간에 커밋되지 않은 수정 사항이 남아 있다면 브랜치 전환 과정에서 충돌이 발생하거나 명령이 거부될 수 있으므로, 이전 브랜치에서 작업 내역을 모두 커밋하거나 임시 보관(stash)한 뒤 실행해야 한다.

목적지 브랜치로 이동을 완료했다면, 가져올 대상 커밋의 고유 해시 번호를 지정하여 복사 작업을 수행한다.

  1. 커밋을 복사한다.
git cherry-pick b538c0f

git cherry-pick 명령어 뒤에 대상 커밋 해시(b538c0f)를 전달하면, 해당 커밋에서 변경된 파일 내용만을 추출하여 현재 위치한 main 브랜치 위에 새로운 커밋으로 자동 생성한다. 커밋 내용과 메시지는 그대로 복사되지만 대상 브랜치에서 새롭게 생성되는 커밋이므로 고유한 새 커밋 해시가 부여된다.

위 화면은 터미널에서 체리픽 명령어가 실행되어 대상 커밋이 현재 브랜치로 복사·반영된 결과를 나타낸다. 터미널 출력 창에서 변경된 파일 목록과 라인 추가·삭제 내역을 확인하여 지정한 변경 사항이 정상적으로 반영되었는지 검토한다.

만약 충돌이 발생할 경우 git cherry-pick —skip 입력후 병합한다

가져오려는 커밋의 코드 변경 지점이 main 브랜치의 기존 코드와 상충할 경우 충돌(Conflict)이 발생하여 작업이 일시 정지된다. --skip 옵션은 현재 충돌을 일으킨 커밋의 적용을 건너뛰고 체리픽을 종료할 때 사용한다. 충돌을 직접 해결하여 변경 사항을 반영하려면 충돌이 일어난 파일의 마커를 수정한 뒤 git add로 스테이징하고 git cherry-pick --continue를 실행한다. 작업을 완전히 취소하고 명령 실행 전 상태로 되돌리고자 할 때는 git cherry-pick --abort를 입력한다.

  1. 이후 배포용 브랜치에서 추가 작업을 수행한다.

커밋이 정상적으로 복사된 후에는 git log 명령어로 커밋 이력을 확인하고, 빌드 및 테스트를 거쳐 배포용 브랜치에서 다음 단계의 개발이나 원격 저장소 푸시(Push) 작업을 진행한다.

댓글 남기기