Git : cherry-pick

2024. 1. 7. 18:36·git
반응형

cherry-pick

명령어 : git cherry-pick <Commit1> <Commit2> <...>

현재 위치(HEAD) 아래에 있는 일련의 커밋들에 대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다.

cherry pick이란, 체리 한 바구니에서 제일 좋은 체리만 고르는 것에서 유래한 표현으로 ,일반적으로는 제일 좋은 걸 선별한다는 뜻으로 쓰인다고 합니다!

 

참고로 commit을 branch에서 다른 branch로 옮기는 건 아니고, 전체 history를 따지면 새로운 commit이 늘어나는 것입니다.

 

 

예시

현재 ‘브랜치 Y’를 개발하고 있는 상황에서 ‘브랜치 X’에 적용되어 있는 3개의 커밋을 가져와서 반영하고 싶은 상황입니다. 이럴 때, git cherry-pick 명령을 이용하면 됩니다.

$ git cherry-pick 555f8b4 8f618a0 480b6bb
or
$ git cherry-pick 555f8b4..480b6bb   # 가져오고 싶은 범위의 첫번째와 마지막 커밋 해시 값

 

위의 명령어 결과 아래와 같이 적용됩니다.

 

 

 

 

예시2

 

위 3개의 브랜치에서 main branch로 C3 C5 C7을 가져오기 위해서

git cherry-pick C3 C4 C7

을 수행할 수 있고 그 결과는 아래와 같습니다.

 

 

 

-continue와 -abort 옵션

다른 브랜치의 커밋 사항을 가져오는 동작이다보니 수정사항이 현재 브랜치의 코드에 맞지 않는 경우가 있습니다.

이 경우 충돌 (conflict)가 발생합니다.

이 경우 두가지의 선택지가 있습니다.

1. -abort

$ git cherry-pick -abort

만약 cherry-pick을 중단하고 싶으면 -abort 옵션을 이용해 중단할 수 있습니다.

이 경우, cherry-pick 명령을 실행하기 전으로 코드가 돌아갑니다.

 

2. -continue

$ vi $file_path # 파일 수정
$ git add $file_path
$ git cherry-pick -continue

충돌이 발생한 코드를 에디터로 열어서 수정하고, 수정된 코드를 추가하고, git cherry-pick -continue 명령을 실행하면 충돌을 수정한 코드가 반영되고, cherry-pick이 재개됩니다.


 

💡 cherry-pick을 언제 쓰는게 좋을까?

 

같은 commit이 여러 번 쌓이는 일도 발생할 수 있기 때문에 cherry-picking이 가능한 상황에서 보통은 일반적인 merge를 사용하는 걸 선호한다고 합니다. 그렇다면 어떤 상황에서 쓰는게 좋을까요?

 

[버그수정]

A기능 개발을 완료 하고 B기능을 개발중인 상황,

알고보니 A 기능에 버그가 있다고 한다!

빠르게 버그 패치를 해서 내 브랜치에 commit 한다!

방금 commit 한 이 패치는 git cherry-pick을 통해

main branch에 바로 반영되었다!

 

[반영되지 않은 pr]

실수로 pull request를 merge하기 전에 닫아버렸다

하지만, 당황하지 않고 git cherry-pick을 통해 해당 commit을 가져옴으로써 살릴 수 있게 됐다 !

 

 

 

 

아래는 git의 여러가지 명령어를 실습 할 수 있는 사이트 입니다.

Learn Git Branching

 

참고

  • 생활코딩 (https://opentutorials.org/)
  • https://learngitbranching.js.org/
  • https://brownbears.tistory.com/606
반응형

'git' 카테고리의 다른 글

git 유용한 명령어 interactive rebase  (1) 2024.01.11
'git' 카테고리의 다른 글
  • git 유용한 명령어 interactive rebase
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • 전체
    오늘
    어제
    • 분류 전체보기
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • 백준 알고리즘
        • CodeUp
        • 코테 이론
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • 개발일지
      • 게임기획
      • Docker
      • IPFS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    안드로이드
    verilog할당문
    빅데이터
    UI
    Ipfs
    nft
    파이썬 그리디
    Python
    ipfs add
    파이썬
    ifps 네트워크 지연
    NFT Marketplace
    git 유용한 명령어
    그리디 알고리즘
    파이썬 딕셔너리
    verilog
    파이썬 완전탐색
    범주형 자료
    코딩테스트
    NFT IPFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jjikky
Git : cherry-pick
상단으로

티스토리툴바