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까지의 모든 커밋을 현재 브랜치에 복사한다.
참고해서 문제 해결했습니다 :)
좋은 글 감사합니다 !