본문 바로가기

Git

Git 특정 브랜치에서 다른 브랜치로 커밋 옮기기 (feat. cherry-pick)

1. 문제 상황

프로젝트 개발 도중 main 브랜치에서 작업을 하고 있었는데, 추가 기능은 별도의 새 브랜치에서 진행해야 하는 요구사항이 생겼습니다.

 

문제는 이미 main 브랜치에서 커밋을 완료한 상태였다는 점이었습니다.

아직 원격 저장소(GitLab)에는 push를 하지 않았지만,

이 커밋을 그대로 새로 만든 기능 브랜치에 옮겨야 했습니다.

 

정리하자면 :

  • main에서 코드를 작성하고 커밋까지 완료
  • 아직 push는 하지 않은 상태 
  • 새 브랜치를 만들어, 해당 커밋을 옮겨서 작업 이어가기 

2. 해결 과정

먼저 원격 저장소에 새 브랜치를 만들고, 로컬에 가져왔습니다.

# 원격 저장소에서 새 브랜치 목록 가져오기
git fetch origin

# 새 브랜치로 체크아웃 (로컬에 없으면 자동생성)
git checkout -b feature/new-feature origin/feature/new-feature

하지만 여기에는 main에서 작업했던 커밋이 들어있지 않습니다.

따라서 main 브랜치에서 했던 커밋을 옮겨와야 했습니다.

 

이때 사용하는 명령어가 바로 cherry-pick입니다.

git_cherry-pick


3. cherry-pick 사용하기

먼저 main으로 돌아옵니다.

git checkout main

main에서 옮기고 싶은 커밋의 해시를 확인합니다.

git log

원하는 커밋 해시값(예: zxcv12)을 복사한 뒤, 새 브랜치로 이동합니다.

git checkout feature/new-feature

새 브랜치에서 다음 명령어를 실행합니다.

git cherry-pick zxcv12

그러면 해당 커밋이 새 브랜치에 그대로 적용됩니다.


4. 최종 해결 방법

  1. 원격 브랜치 가져오기 (git fetch)
  2. 새 브랜치 체크아웃 (git checkout -b)
  3. main에서 작업한 커밋 해시 확인 (git log)
  4. 새 브랜치에서 cherry-pick으로 적용 (git cherry-pick 커밋해시)

이렇게 해서 원하는 커밋을 새 브랜치로 깔끔하게 옮길 수 있었습니다.


5. 정리

  • git fetch : 원격 저장소의 최신 브랜치/커밋 정보 가져오기
  • git checkout -b : 새 브랜치 생성 및 이동
  • git log : 원하는 커밋 해시 확인
  • git cherry-pig : 특정 커밋을 다른 브랜치로 적용

이번 경험으로, 잘못된 브랜치에서 커밋했더라도 당황하지 않고 원하는 브랜치로 옮길 수 있는 방법을 배웠습니다.