yoongrammer

git rebase 와 cherry-pick 알아보기 본문

VCS (Version Control System)/git

git rebase 와 cherry-pick 알아보기

yoongrammer 2020. 11. 20. 22:19
728x90

목차

    git rebase와 cherry-pick 알아보기


    히스토리를 한 줄로 관리하기 위해 Merge 보다 Rebase 나 Cherry-Pick을 사용하는 경우가 많습니다.

    이번에는 RebaseCherry-Pick에 대해 알아보도록 하겠습니다.

    git rebase


    rebase는 브랜치의 공통 조상이 되는 base를 다른 브랜치의 커밋 지점으로 바꾸는 것입니다.

     

    이해하기 쉽게 그림으로 설명하겠습니다.

    위 그림을 보면 mastertopic 브랜치의 공통조상인 baseC1이라는 것을 볼 수 있습니다.

     

    1. HEADtopic으로 옮기겠습니다.

    $ git checkout topic

    2. rebase 명령으로 topicbasemaster가 가리키는 C4로 변경합니다.

    $ git rebase master

    실제로 일어나는 일은 C3, C5 를 임시로 저장해 놓고 C3, C5에 대한 새로운 커밋 C3`, C5`를 만들어서 차례대로 master 뒤에 적용합니다.

     

    3. 마지막으로 master 브랜치를 topic 브랜치에 merge 합니다.

    $ git checkout master
    $ git merge topic

    fast-forward 방식으로 merge가 됩니다.

     

    reabse를 사용하면 한 줄로 깔끔한 commit 히스토리가 만들어집니다.

    하지만 이미 공개 저장소에 push 한 커밋을 rebase 하면 히스토리가 엉망이 될 수 있기 때문에 주의해야 합니다.

     

    cherry-pick


    cherry-pick은 커밋 하나만 rebase 하는 것입니다.

    cherry-pick은 다른 사람의 커밋 중 일부를 가져오는 경우에 주로 사용됩니다.

    커밋 해시값을 사용하여 cherry-pick을 할 수 있습니다.

    e43a6 커밋 하나만 master 브랜치에 적용하려면 아래와 같은 명령을 실행하면 됩니다.

    $ git cherry-pick e43a6

    e43a6 커밋과 동일한 내용의 새로운 커밋 (4a094)을 만들어 적용하고 필요 없는 브랜치나 커밋은 삭제됩니다.

     

    커밋 해시값을 여러 개 나열하면 여러 개를 한꺼번에 브랜치에 적용할 수도 있습니다.

    $ git cherry-pick e43a6 5ddae

    cheery-pick 사용 시 conflict가 발생하는 경우

    cherry-pick시 conflict가 발생하면 conflict를 수정하거나 cherry-pick을 취소하면 됩니다.

     

    Conflict를 해결하고 cherry-pick을 진행하는 방법

    1. Conflict를 해결하기 위해 코드를 수정한다.
    2. git add 명령으로 수정된 코드를 add 한다.
    3. git chery-pick --continue 명령을 수행한다.

    cherry-pick을 취소하는 방법

    --abort 명령을 사용하면 cherry-pick을 하기 전 상태로 돌아갈 수 있습니다.

    git cherry-pick --abort
    728x90

    'VCS (Version Control System) > git' 카테고리의 다른 글

    git diff 사용하기  (0) 2020.11.29
    git 디버깅 하기 (blame, bisect)  (0) 2020.11.21
    git remote 저장소  (0) 2020.11.19
    git 브랜치(branch) 란?  (0) 2020.11.18
    git 되돌리기 (git commit 취소, git add 취소)  (0) 2020.11.17
    Comments