본문 바로가기

GIT

GIT - cherrypick

                     

1.cherry_pick 정의

 

 

                     (1) - 조상인 b6bc2f2 m1버전은 work.txt 파일만 존재하는 버전

                   

                     (2) - master branch의 f790368 m2버전 폴더 상태

                           (m1 버전에서 work2.txt 파일 추가)

 

                    (3) - 4f439e3 t2버전 폴더상태

                          (work.txt | topic.txt 가 존재했던 t1 버전에서 topic2.txt 파일이 추가)

 

우리는 현재 m2 버전에다가 t2버전이 생성될때 생긴 변화(topic2.txt 파일이 추가)만을 추가하여 합병하고 싶다

 

                 m2버전                         new버전(cherrypick)

즉      work.txt | work2.txt  ---> work.txt | work2.txt | topic2.txt 로 만들고 싶다

 

이것이 체리픽이다

 

 

 

 

 

2 .cherry_pick 명령실행

 

(1) - 어느 버전의 변화를 가져올 바탕이 되는 버전으로 HEAD를 주고

(2) - git cherry-pick 가져올 변화가 존재하는 버전(아래에서는 4f439e4)

(3) - 이 후 ls로 파일목록을 보면 우리가 원했던대로 topic2.txt가 추가된 것을 확인할 수 있다

(4) - git log를 보면 master branch였던 * f790368 m2 뒤에 새롭게 t2버전이 cherrypick되어 추가 되었다는

      뜻의 * 3108057 (HEAD -> master) t2 버전이 생성된 것을 볼 수 있다.

 

 

3.chetty-pick conflict

 (1) - 아래와 같은 work.txt파일의 1버전을 조상으로하는 m2,m3의 master버전 과 t2,t3의 topic버전을 생성 

(2) - 우리는 (master) m3 버전에 t3(topic)버전을 cherry-pick 하고 싶다 즉

       1 | m2 | m3 라는 내용에 t3(topic)버전이 생성될 때 생긴 변화 t3 만을 cherry-pick 하고싶다

 

(3) - 그러면 1 | m2 | m3 

                           |  t3       와 같이 충돌이 생길 것이다

 

(4) - 먼저 HEAD를 master로 옮긴 후 git cherry-pick topic (73368f7) 명령어 입력하면

    - conflict 에러가 뜬다 

  

(5) - 여기서 cat work.txt를 하면 아래와 같은 모습을 보여주는데 이는 원하는 cherry-pick의 청사진이 아니다

 

(6) - mergetool을 이용해야 정확한 cherry-pick을 위한 충돌과정을 볼 수 있다 (4pmerge)

    - git mergetool 명령어로 4pmerge프로그램 실행 

    - BASE인 t2 버전cherry-pick 해오려는 t3 버전을 비교하여 t3버전 에서의 변화 즉 t3

      추가되었다는 사실을 인지하고

    - cherry-pick한 t3 라는 내용을 m3 버전으로 가져오는 과정에서 어느 충돌했다면 어느부분이 충돌했는지 알수있다 

 

***핵심은 git cherry-pick 변화를 가져올 버전(t3버전) 명령어를 통해 mergetool에서 

  BASE 변화를 가져올 버전의 바로 이전버전(t2버전)을 가져온다는 것이다

 

***만약 같은 상황에서 git merge topic을 하고 git mergetool을 불러오게되면 BASEc010739 1 버전이 된다

 

(7) - 아래와 같이 confilct를 해결, 수정하고 저장을 하면 git add까지 완료된 상태가 된다

(8) - git status를 해보면 conflick를 해결했고 add까지 된 상태를 확인할 수 있다

    - cherry-pick을 이대로 진행시켜 commit하려면 git cherry-pick --continue 명령어를 입력

(9) - 아래와 같은 화면에서 i를 눌러 변경사항에 대한 설명을 추가 하고 ESC -> : -> wq 입력하여 나가기

(10) - git log --all --oneline --graph로 확인해보자

'GIT' 카테고리의 다른 글

GIT - pull-request  (0) 2020.12.17
GIT - rebase  (0) 2020.12.12
GIT - clone, pull,fetch  (0) 2020.12.12
GIT - backup, push  (0) 2020.12.12
GIT - branch(3 way merge)  (0) 2020.12.11