본문 바로가기
Git

Git - 4

by 완두완두콩 2022. 1. 25.

병합


 

 

Fast - Forward


Fast - Forward 병합은 혼자서 개발하는 경우에 적합하다.

예를 들어 master 브랜치를 기능 개발이 완료된 브랜치라 생각하고 , feature 브랜치를 기능을 개발하는 브랜치라 

생각하면, feature 브랜치에서 개발한 후 , 완료되면 master 브랜치와 병합 하는 방식으로 진행하면 된다.

병합 충돌 발생 X 

 

3-Way 병합


기존의 Fast - Forward 에서 master 브랜치에 수정을 하지 않고 feature 에만 수정한 후 병합을 진행했지만

3 - Way 병합에서는 master 에도 수정을 하고 , hotfix 브랜치에서도 수정을 했다고 가정을 한다.

다음과 같은 방식으로 , 기준 커밋을 기준으로 두 개의 브랜치가 갈라지게 된다.

 

충돌


만약 footer 부분에 서로 다른 개발자가 수정을 행한 경우 , 병합을 시도하면 충돌이 발생한다.

왜냐하면 Git 입장에서는 어떤 것을 기준으로 병합을 실행해야 할지 모르기 때문이다.

이러한 충돌 발생을 최소화 하기 위해서는 계속 해서 pull 을 통해 새로 업데이트 된 내용을 적용하고 push 를 진행하는

방법이 있다.

 

 

리베이스


즉 , 3-Way 병합은 새로운 커밋을 만들면서 두 브랜치를 한번에 하나로 합치는 과정이고

rebase 는 base 를 옮겨서 마치 Fast - Forward 병합처럼 실행하는 것이다. 

master 브랜치에 있는 마지막 커밋에 base 를 옮기고 , 그 뒤에다가 병합 진행.

 

리베이스를 제외한 병합은 병합이 되는 기존 브랜치로 이동하여 병합을 진행하였으나

리베이스의 경우 , 파생 브랜치에서 리베이스로 병합을 진행한다.

즉,  리베이스는 커밋을 재배치만 해줄 뿐 , 실제로 병합이 일어나지는 않는다. -> FF 병합을 실행해주어야 한다.

 

리베이스 충돌 처리


 

리베이스 하는 과정에서 같은 부분의 코드를 수정하여 충돌이 발생 시에  , 단계적으로 오류 난 부분을 수동으로

병합해주면서 리베이스를 수행할 수 있다. 

모두 수정하여 리베이스를 수행한 후에는 다시 master 브랜치로 체크 아웃 하여 merge 실행.

 

'Git' 카테고리의 다른 글

Git - 3  (0) 2022.01.24
Git - 2  (0) 2022.01.24
Git - 1  (0) 2022.01.24

댓글