Management/GIT

[GIT] 깃(Git) 체리픽(cherry-pick) - 필요한 commit만 가져오기

썸머워즈 2022. 10. 18. 09:04
반응형

git cherry-pick

git cherry-pick이 뭘까? 

git cherry-pick은 제목과 마찬가지로 필요한 commit만 골라서 가져오는 명령어이다.

쉽게 말해 다른 브랜치에 있는 commit들 중에서 원하는, 필요한 commit을 지금 내 브랜치에 가져와 commit을 하는 것이다.

 

참고로 해당 commit을 branch끼리 옮기는 게 아니라 동일한 commit을 다른 branch에 복사하는 개념이라고 생각하면 된다. (실제로 commit이 추가된다.)

 

그렇다면 cherry-pick은 언제 사용하는 걸까?

git cherry-pick은 유용한 도구이지만 같은 commit이 중복되는 일이 발생하거나 그 외에도 여러가지 문제가 발생할 수 있기 때문에 꼭 필요한 상황에서만 사용하는 것을 권장한다.

  • 팀으로 협업할 때
    팀으로 협업을 진행하고 있을때, 다른 동료가 만들고 있는 기능이 필요한 순간이 있다. 만약 동료가 해당 기능을 이미 다 만들어 놨고, 동료가 맡은 모든 작업을 merge 할 때까지 시간이 걸린다면 동료가 만들었다는 기능이 들어있는 commit만 골라서 가져올 때 사용한다.
  • 버그를 수정할 때
    새로운 기능을 개발하는 동안 기존에 있던 기능에서 버그가 발견되었을 때, 개발자는 이 버그를 패치하기위해 명시적 커밋을 만들고 해당 커밋만 골라서 master 브랜치에 배포할 수 있다.
  • 반영되지 않은 손실된 커밋 복원 (pull request)
    실수로 pull request를 merge하기 전에 닫아버렸을 때, cherry-pick을 사용해 해당 commit을 가져옴으로써 살릴 수 있다.

git cherry-pick 사용하기

cherry-pick을 사용하는 방법에 대해 간단하게 알아보자.

우선 아래와 같은 상황에서 시작해보자.

그냥 막 작업하다보니 좀 지저분해졌는데, 우선 하고자 하는 것은 master브랜치에 record브랜치가 업데이트한 b.txt 파일의 정보가 당장 필요하다고 해보자.

 

이럴 때 저 update b.txt file이라는 메시지가 적힌 commit만 골라서 가져올 때 cherry-pick을 사용하면 된다.

# git cherry-pick <HASH>
git cherry-pick 309fe2b

# cherry-pick 여러개 적용
# git cherry-pick <HASH1> <HASH2> ...

 

로그를 보면 알겠지만 update b.txt file이라는 commit이 master 브랜치에 추가된 것을 볼 수 있다.

여기서 혹시나 cherry-pick을 해서 같은 파일을 커밋했기 때문에 충돌 나는 거 아냐?라고 의문을 가질 수 있겠지만

놀랍게도 merge를 그냥 해봤는데, 아무 에러 없이 잘 merge되었다.

 

추가적으로 만약 cherry-pick을 할 때 자동 커밋되는 게 싫다 하면 --no-commit 옵션을 사용하면 되는데, 많이 사용되는 옵션인지는 잘 모르겠다.

 

git cherry-pick 충돌 시 해결

그러나 혹시 본인이 작업 중이던 파일과 cherry-pick을 통해 가져온 commit이 동일하여 conflict가 발생할 수는 있다.

이때 해결방안으로는 두 가지 방법이 존재한다.

충돌 해결 후, cherry-pick 계속 진행

이건 rebase 명령어를 사용할 때와 비슷하다.

  1. 충돌 난 코드를 수정
  2. git add <path> 명령어로 수정된 코드 등록
  3. git cherry-pick --continue 명령어를 통해 충돌로 중지되었던 cherry-pick을 계속 진행

 cherry-pick 중단

  1. git cherry-pick --abort 명령어를 사용해 cherry-pick을 중단하게 되면 그 이전 상태로 다시 돌아갈 수 있다.

참고: https://www.atlassian.com/git/tutorials/cherry-pick

 

Git Cherry Pick | Atlassian Git Tutorial

Learn about git cherry-pick, including usage, benefits, and examples using the cherry pick command.

www.atlassian.com

참고: https://git-scm.com/docs/git-cherry-pick

 

Git - git-cherry-pick Documentation

git cherry-pick master Apply the change introduced by the commit at the tip of the master branch and create a new commit with this change. git cherry-pick ..master git cherry-pick ^HEAD master Apply the changes introduced by all commits that are ancestors

git-scm.com

반응형