git merge 와 git rebase 의 차 이 를 자세히 설명 합 니 다.

3710 단어 git.mergerebase
머리말
      사실 이 문 제 는 저 를 괴 롭 혔 습 니 다.저 와 같은 사람 도 있 을 거 라 고 믿 습 니 다.인터넷 에 이런 해석 이 많 았 습 니 다.하지만 그림 이 없 거나 설명 이 어 지 럽 고 잘 이해 하지 못 했 습 니 다.git 에 대한 사용 을 통 해 동료 에 게 가르침 을 청 한 것 은 이 문 제 를 이해 한 셈 입 니 다.그래서 적어 서 공유 하 겠 습 니 다.저 는 가능 한 한 상세 하 게 설명 하 겠 습 니 다.
merge 와 rebase 의 차이
        다음 그림 과 같은 창고 가 있다 고 가정 하면 이 창 고 는 master 와 develop 두 가지 가 있 고 develop 은(3.added merge.txt file)commt 에서 master 에서 끌 어 낸 분기 입 니 다.  

merge
        현재 HEAD 가(6.added hello.txt file)에 있다 고 가정 하면 master 분기 의 가장 가 까 운 제출 처 에 있 습 니 다.이때 git merge develop 을 실행 합 니 다.결 과 는 다음 그림 과 같 습 니 다. 

         작업 원 리 는 git 가 두 갈래 의 공동 조상 인(3.added merge.txt file)이 commt 와 두 갈래 의 최신 제출 즉(6.added hello.txt file)과(5.added test.txt file)에 따라 3 자 를 합 친 다음 에 합 쳐 수 정 된 내용 을 새로운 commt,즉 그림 2(7.Merge branch'develop')로 만 드 는 것 이다. 
        이것 은 merge 의 효과 입 니 다.쉽게 말 하면 두 가 지 를 합 쳐 새로운 제출 을 만 듭 니 다.
rebase
      그럼 리 베 이 스 는 이렇게 일 하 는 거 예요? 
      초기 상태 도 그림 에 표 시 된 것 이 라 고 가정 합 니 다.두 갈래 에 하나의 master,하나의 develop 이 있 습 니 다.이때 HEAD 는(6.added hello.txt file)에서 git rebase develop 을 실행 하고 있 습 니 다.결 과 는 다음 그림 3 과 같 습 니 다. 

        develop 분기 가 갈 라 져 없어 진 것 을 볼 수 있 습 니 다.다음은 작업 원 리 를 설명 하 겠 습 니 다. 
         git rebase develop 을 실행 하기 전에 HEAD 는(6.added hello.txt file)에서 rebase 작업 을 수행 할 때 git 는 두 갈래 의 공동 조상(3.added merge.txt file)부터 현재 분기(이때 master 분기)의 수정,즉(6.added hello.txt file)이라는 commt 를 추출 합 니 다.master 분기 가 대상 분기 의 최신 제출(이때 develop 분기)즉(5.added test.txt file)을 가리 키 고 방금 추출 한 수정 사항 을 이 최신 제출 뒤에 적용 합 니 다.추출 한 수정 이 여러 개 있 으 면 git 는 최신 제출 뒤에 순서대로 적 용 됩 니 다.다음 두 그림 에서 보 듯 이 그림 4 는 초기 상태 이 고 그림 5 는 rebase 를 실행 한 상태 입 니 다.  


   쉽게 말 하면 git rebase 추출 작업 은 git cherry-pick 과 같 습 니 다.rebase 를 실행 한 후 현재 제출 한 cherry-pick 을 대상 분기 에 순서대로 제출 한 다음 원본 분기 에서 추출 한 commt 를 삭제 합 니 다.
merge OR rebase
그럼 merge 는 언제 쓰 고 rebase 는 언제 쓰 나 요? 
다시 예 를 들 면: 
초기 상 태 는 다음 그림 6 과 같다. 
         이전 과 마찬가지 로 develop 분기 도(3.added merge.txt file)에서 master 분기 에서 develop 가 지 를 끌 어 옵 니 다.다른 것 은 두 가지 가 각각 commt 의 시간 이 다 릅 니 다.이전 develop 분기 의 4 와 5 comit 는 master 분기 3 이후 6 이전에 develop 분기 의 4 제출 은 master 분기 의 5 제출 보다 빠 르 고 develop 분기 의 6 제출 은 master 의 5 제출 보다 늦 습 니 다.master 의 7 제출 보다 빠 릅 니 다.  

위의 그림 에서 master 분기 의 7commit 에서 git merge develop 을 실행 합 니 다.결 과 는 다음 그림 7 과 같 습 니 다. 

git rebase develop 을 실행 합 니 다.결 과 는 다음 그림 8 과 같 습 니 다. 

1.merge 결 과 는 타임 라인 을 나 타 낼 수 있 지만 rebase 는 타임 라인 을 흐 트 러 뜨 린 다. 
2.rebase 는 깔끔 해 보이 지만 merge 는 깔끔 해 보이 지 않 습 니 다. 
3.최종 결 과 는 코드 를 합 친 것 이기 때문에 이 두 명령 을 어떻게 사용 하 는 지 프로젝트 의 필요 에 따라 봅 니 다.
       또 하 나 는 프로젝트 에서 git pull 을 자주 사용 하여 코드 를 끌 어 옵 니 다.git pull 은 git fetch+git merge 에 해당 합 니 다.이때 git pull-r 를 실행 하면 git pull Crebase 는 git fetch+git rebase 에 해당 합 니 다.
마지막 으로 git 시각 화 도 구 를 추천 합 니 다.저 는 gitkraken 을 사용 합 니 다.이 도구 들 은 기본적으로 똑 같 습 니 다.개인 이 좋아 하 는 것 을 보 세 요.
git merge 와 git rebase 의 차 이 를 상세 하 게 설명 하 는 이 글 은 여기까지 입 니 다.git merge 와 git rebase 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기