Git에서 branch merge 방법들과 각 방법의 특징을 설명해 주세요.

2024. 8. 19. 05:46코드잇 스프린트/위클리 페이퍼

Git에서 branch merge 방법들과 각 방법의 특징을 설명해 주세요.

 

1. Merge

  • 분리된 branch를 하나로 합치는 작업

 

2. Merge 전략

2-1. Fast-Forward

Fast-Forward Merge 수행 전

 

Fast-Forward Merge 수행 후

  • 두 branch가 이전/이후 관계일 때의 merge 전략
  • 별도의 merge commit 없이 HEAD의 위치를 최신 commit으로 이동함

 

2-2. 3-Way

3-Way Merge 수행 전

 

3-Way Merge 수행 후

  • 두 branch가 공통 조상을 두고 분기했을 때의 merge 전략
  • 공통 조상 commit과 각 branch의 최신 commit을 이용하여 merge 진행
  • merge 진행 후 별도의 merge commit이 생성됨
  • 다양한 3-Way 전략이 있음

Resolve

  • 초기 3-Way Merge 전략

Recursive

  • 2005년부터 resolve 전략을 대체
  • 공통 조상이 없어도 재귀적으로 merge할 수 있음
  • 파일명 변경을 감지할 수 있음

ORT

  • Ostensibly Recursive’s Twin
  • 2021년부터 recursive 전략을 대체
  • recursive를 최적화하여 성능을 향상시킴

 

2-3. 기타 Merge 전략

  • 상황에 따라 octopus, ours, subtree 등 다양한 전략이 적용될 수 있음

 

3. Merge 방식

3-1. Merge

  • merge 전략에 따른 merge 방식
메인 브랜치에서 `git merge 병합될브랜치`

 

3-2. Rebase & Merge

Rebase 수행 전

 

Rebase 수행 후

  • 분기된 branch의 commit을 그대로 끌어오는 방식
병합될 브랜치에서 `git rebase 메인브랜치`
  • rebase 자체로는 병합될 브랜치에 메인 브랜치의 commit이 추가되기만 함
  • rebase 이후 메인 브랜치에서 merge해야 함

 

3-3. Squash & Merge

Squash 수행 전

 

Squash 수행 후

  • 분기된 branch의 commit을 하나로 합쳐 끌어오는 방식
  • sqaush 자체 명령어는 없고, 다른 git 명령어를 활용해야 함

rebase를 통한 Squash

병합될 브랜치에서 `git rebase -i 공통조상`
  • rebase INTERACTIVE 창에서 맨 위를 제외한 나머지 commit 앞에 s(Squash) 키워드를 적고, commit 창에서 합쳐진 commit 명을 적음
  • rebase -i 자체로는 병합될 브랜치의 commit을 합치기만 함
  • rebase -i 이후 다시 rebase하고, 메인 브랜치에서 merge해야 함

 

 

 

merge를 통한 Squash

메인 브랜치에서 `git merge --squash 병합될브랜치`
  • merge --squash 자체로는 메인 브랜치와 병합될 브랜치의 차이를 working directory에 적용시키기만 함
  • merge --squash 이후 add & commit해야 함

 

4. 참고 자료