혼자 적어보는 노트

[Git] 다른 브랜치에서 생성한 커밋 가져오기 / cherry-pick 본문

기타

[Git] 다른 브랜치에서 생성한 커밋 가져오기 / cherry-pick

jinist 2022. 2. 8. 22:41


git cherry-pick

 

git을 사용하다 보면 커밋을 다른 브랜치에 잘못하거나
다른 브랜치에 있는 커밋을 가져와야 할 경우가 생길 수 있다.

 

rebase를 하는 방법도 있겠지만 좀 더 간단하게 커밋을 복사해서 가지고 올 수 있는 방법이 있다.

 

cherry-pick

원하는 커밋을 복사하여 현재 브랜치로 가져오는 명령어이다.

git cherry-pick [가져올 커밋 해시]

현재 브랜치가 main 브랜치인 상태에서 new브랜치에 있는 커밋 해시를 가지고 왔을 경우라면

new브랜치에 있는 커밋은 그대로인 상태에서 main브랜치에 해당 커밋이 복사된다.

 

cherry-pick한 커밋의 변경사항을 main브랜치의 커밋에 적용하고 새로운 커밋을 기록하는 방식이다.

 

* cherry-pick을 할 경우 같은 내용의 커밋이 여러 개 생길 수 있고
이후에 어디서 어디로 cherry-pick을 했는지 알 수 없는 상황이 생길 수 있기 때문에 고려하여 사용해야 한다.

 

 

commit 메세지를 수정하여 cherry-pick

cherry-pick을 할 경우 기본적으로 커밋이 그대로 복사되는데
메세지를 수정하여 복사하고 싶다면 아래의 명령어를 입력하면 된다.

 

git cherry-pick -e

 

여러개의 commit cherry-pick

git cherry-pick [커밋해시] [커밋해시] [커밋해시]

커밋들의 해시를 이어서 입력해주면 된다.

 

git cherry-pick [첫번째해시]..[마지막해시]

지정할 범위의 첫 번째 해시와 마지막 해시 사이에 ..을 사용하여
cherry-pick할 범위를 지정해 줄 수 있다.

 

 

❗ 충돌 상황 (Conflict)

다른 브랜치의 커밋을 가지고 오는 것이기 때문에 해당 커밋이 현재 브랜치의 코드와 충돌이 일어날 수 있다.

 

cherry-pick한 커밋의 파일이 main 브랜치에서 생성된 것이 아니라
다른 브랜치에서 생성되었을 경우.

 

git add 파일명
git cheery-pick --continue

 

이 경우 외의 충돌 상황 시에도 confilct를 해결하고 git cherry-pick --continue 을 진행시켜주면 된다.

 

 

cherry-pick 중단

git cherry-pick --abord

cherry-pick을 중단하고 싶다면 --abord옵션을 이용하여 cherry-pick이전의 코드로 돌아갈 수 있다

Comments