[Git] cherry-pick으로 원하는 커밋 가져오기

Sony·2020년 4월 16일
5
post-thumbnail
post-custom-banner

git cherry-pick특정 브랜치에서 원하는 커밋을 가져올 때 사용한다. 그 동안 말로만 들었지 실제로 사용해본 적은 없었다. 이번에 코드를 작성하면서 cherry-pick이 필요한 상황이 생겨 사용해보았는데 원하던 대로 깔끔하게 실행되었다. 종종 사용할 일이 있을 것 같아 나중을 위해 정리해두려고 한다.

문제

  • recap-2 브랜치에서 커밋을 해야하는데, 실수로 master 브랜치에 해버렸다.
  • 심지어 커밋이 여러개가 쌓인 상황.
  • master 브랜치에 있는 커밋을 recap-2 브랜치로 가져오고 싶다.

원래는 master 브랜치에서 recap-2 브랜치를 만들어 커밋을 해야하는 상황이었다. 그런데 recap-2 브랜치 만드는걸 까먹고 master 브랜치에서 계속 작업하며 커밋을 쌓아버렸다.

해결

1.master 브랜치에서 원하는 시점의 커밋으로 checkout 한 뒤 recap-2 브랜치를 생성한다.

원하는 시점인 ba9487f 커밋으로 checkout 한 뒤 recap-2 브랜치를 생성했다.

2.recap-2브랜치에 체크아웃 한 뒤 master 브랜치에서 원하는 커밋을 cherry-pick해온다.

이 때 커밋을 하나하나 일일이 가져오는 건 번거로우니 범위로 가져온다.
특정 범위의 커밋을 cherry-pick으로 가져오는 문법은 다음과 같다.

git cherry-pick oldest-commit^..latest-commit

위와 같이 입력하면 oldest-commit 부터 lastest-commit 까지의 범위에 있는 커밋들을 가져온다.
시작 커밋(oldest-commit)에^를 붙여야 oldest-commit과 latest-commit 모두 포함된다.
^ 를 붙이지 않으면 시작 커밋은 포함되지 않는다.

master 브랜치의 f2abff5 커밋부터 8e2fa35 커밋까지 cherry-pick하기 위해 아래와 같이 입력한다.

git cherry-pick f2abff5^..8e2fa35

master 브랜치의 f2abff5부터 8e2fa35 까지의 커밋들이 recap-2 브랜치에 새로 생성된 걸 확인할 수 있다. 기존 커밋을 복사해서 새로운 커밋을 생성하기 때문에 커밋 번호(hash)는 다르다.

3.master 브랜치에 있는 커밋은 필요 없어졌으니 reset —-hard로 지운다.

git reset ba9487f --hard

정리

특정 브랜치에서 원하는 커밋을 가져오려면 git cherry-pick 명령어를 사용한다.
일정 범위의 커밋을 가져오는 방법은 다음과 같다.

git cherry-pick oldest-commit^..latest-commit

위와 같이 입력하면 oldest-commit부터 lastest-commit까지의 모든 커밋을 현재 브랜치에 복사한다.

profile
개발하며 배운점과 회고를 남기는 공간입니다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 5월 13일

참고해서 문제 해결했습니다 :)
좋은 글 감사합니다 !

답글 달기