Git Merge와 Rebase

2020. 4. 26. 22:42기타

1. Merge

 Merge는 각 브랜치의 마지막 커밋 두 개와 공통 조상의 총 3개의 커밋을 이용하는 3-way-merge를 수행하여 새로운 커밋을 만들어내는 것입니다. 다음 그림에서 보이는 feature와 matser의 마지막 커밋은 각각 f2와 m2, 그리고 공통 조상은 b입니다. 따라서 이 세개의 커밋으로 새로운 커밋을 만듭니다.

3-way-merge를 사용하는 이유

 만약 공통 조상 커밋 없이 나와 다른 사람의 브랜치만 비교하여 Merge를 한다고 합니다.

 그림을 보면 양쪽에서 동일하게 관찰되는 부분을 제외하고는 a가 원래 a였는지 a'였는지 확실하게 정하기가 어렵습니다. 따라서 충돌이 일어난 것인지 여부도 알 수 없습니다.

 하지만 Base커밋을 함께 비교하여 3-way merge를 수행하면 다음 그럼과 같이 Merge 커밋의 상태를 보다 명확하게 결정할 수 있게 됩니다.

2. Rebase

 Rebase는 Merge와는 다르게 이름 그대로 브랜치의 공통 조상이 되는 base를 다른 브랜치의 커밋 지점으로 바꾸는 것입니다.

 그림과 같이 우리가 Rebase를 수행하여 얻고자 하는 목적은 master 브랜치의 마지막 커밋인 m2 이후에 feature의 변경사항인 f1과 f2가 일어난 것처럼 보이게 하고 싶은 것입니다.

Feature 브랜치를 master 브랜치로 Rebase하는 과정

 현재는 feature 브랜치로 체크아웃 한 상태입니다. Head는 feature를 가리키고 있습니다.

 Master와 feature의 공통 조상이 되는 base커밋부터 현재 브랜치까지의 변경 사항을 구해서 patch로 저장해 둡니다.

 Head를 maste로 변경합니다.

 Head가 현재 가리키고 있는 m2에 featrue의 변경사항을 적용하여 f1'와 f2'를 생성합니다.

Feature가 f2’를 가리키도록 합니다.

Feature를 master로 merge하여 완료합니다.

참조: https://velog.io/@godori/Git-Rebase

728x90

'기타' 카테고리의 다른 글

Message Queue  (0) 2020.05.08
Pub/Sub 모델  (0) 2020.05.07
객체 지향 프로그래밍의 5원칙  (0) 2020.04.26
예외 처리  (0) 2020.04.25
API  (0) 2020.04.22