세리프 따라잡기

git cherry-pick 사용법 본문

Git

git cherry-pick 사용법

맑은 고딕 2024. 3. 28. 17:52

 

git cherry-pick이란 뭐야?

- git을 이용해 코드 관리를 하다보면 커밋을 다른 브랜치에 잘못 하거나, 요구사항이 바뀌어 필요 없는 커밋이 생기거나, 코드 의존성(dependency) 때문에 다른 사람의 커밋 중 일부를 가져와야 하는 경우가 종종 생기는데, 이때 사용하는 명령어가 cherry-pick

→ 통상 현업에서 체리픽이 사용되는 경우는 다른 브랜치에 있는 커밋(들)을 현재 작업하는 브랜치에 적용하고 싶을 때 사용 (이때, 커밋은 복사되는 느낌이지만 히스토리 측면으로는 새로운 커밋이 늘어나는 것이기 때문에, 항상 권장되는 방법은 아님)

 

사용법

지금 내가 X 브랜치라고 할 때,

브랜치 Y의 커밋 중 76ae30efa0ee451c 를 골라, 내 브랜치에 적용하고자 한다면,

 

1. 이렇게 두 번 명령어를 통해서 적용하는 방법이 있고

git cherry-pick 76ae30ef
git cherry-pick a0ee451c

 

2. 명령어 뒤에 commit hash를 나열해 여러 개를 한꺼번에 적용하는 방법이 있다. (띄어쓰기로 구분)

git cherry-pick 76ae30ef a0ee451c

 

만약 76ae30ef 부터 a0ee451c 까지 세 커밋을 다 적용을 한다고 한다면, 다음의 방법을 사용하면 된다.

git cherry-pick 76ae30ef^..a0ee451c

이 방법은 git cherry-pick A^..B == A부터 B까지의 커밋을 다 체리픽 해온다는 뜻 [이때 A는 B보다 오래된 커밋이어야 함]

즉, 위의 명령어의 수행 결과는 76ae30ef 13af32cc a0ee451c 세 개의 커밋이 체리픽

 

+번외 방법

git cherry-pick 76ae30ef..a0ee451c

이 방법은 git cherry-pick A..B == A 이후의 커밋부터 B까지의 커밋을 다 체리픽 해온다는 뜻 [이 또한 A가 B보다 오래된 커밋 순]

즉, 위의 명령어의 수행 결과는 13af32cc a0ee451c 두 개의 커밋이 체리픽

 

 

에러 해결법 (충돌)

체리픽 했을 때, 컨플릭이 나는 상황이 발생할 수 있는데, 그 경우 다음과 같은 에러 메시지가 뜬다.

error: cherry-pick is already in progress
hint: try "git cherry-pick (--continue | --abort | --quit)"
fatal: cherry-pick failed

 

--continue
체리픽이 충돌(confilct) 등의 이유로 실패하는 경우 계속해서 해결하기 위한 방법

 

--abort
체리픽을 실행한 이전 상태로 돌리고 체리픽을 취소하는 방법
 
--quit
체리픽이 실패한 경우 더 진행하지 않고 체리픽 상태를 빠져나오는 방법

 

 

 

Comments