merge란?

  • 서로 다른 브랜치를 하나로 통합하는 작업이다.
  • 기준이 되는(변경이 적용될) 브랜치에 대상 브랜치를 가져와서 통합한다.
  • 개발 과정에서 생긴 변경 사항들을 안정적으로 관리하는 것이 목적이다.
  • 통합하는 방법이 여러 가지 존재하므로 필요에 따라 구분해서 사용한다.

merge 방법 종류

  • Fast-forward Merge
  • 3-way Merge
  • Squash Merge
  • Rebase

Fast-forward Merge

  • 조건: 대상 브랜치가 기준 브랜치 이후에 존재한다.
  • 동작: 기준 브랜치의 포인터를 대상 브랜치의 최근 커밋으로 이동한다.
  • 목적: 처음부터 하나인 것 처럼 병합 커밋 없이 선형적으로 커밋 히스토리를 이어붙인다.
A---B---C  main
         \
          D---E  feature

A---B---C---D---E  main

3-way Merge

  • 조건: 공통 조상에서 분리되어 각각 커밋 히스토리가 진행된 경우
  • 동작: 공통 조상을 찾아 두 브랜치의 변경 사항을 합쳐서 병합 커밋을 생성한다.
  • 목적: 분기된 두 브랜치의 변경 사항을 통합하여 단일 브랜치로 만든다.

A---B---C  main
     \
      D---E  feature

A---B---C---F  main
     \     /
      D---E  feature

Squash Merge

  • 조건: 여러 개의 커밋을 하나로 통합해야 할 때
  • 동작: 대상 브랜치의 커밋들을 압축하여 병합 커밋에 요약된다.
  • 목적: 최종 결과만 중요하여 다른 커밋들은 제거하고 요약 정리 하나만 통합한다.
A---B---C  main
     \
      D---E  feature

A---B---C---F  main
     \
      D---E  feature (그대로)

Rebase

  • 조건: 두 브랜치를 선형적인 히스토리로 통합할 때
  • 동작: 기준 브랜치의 최신 커밋 이후로 대상 브래치의 커밋을 추가한다.
  • 목적: 공용으로 사용하는 브랜치에 병합하기 전에 커밋을 정리하려고 사용한다.
# Rebase 전
A---B---C  main
     \
      D---E  feature

# Rebase 실행 후 (feature 브랜치가 main 브랜치의 최신 커밋 이후로 재배치됨)
A---B---C  main
         \
          D'---E'  feature

# feature 브랜치를 main 브랜치로 merge하여 최종 결과(선형적인 히스토리 유지)
A---B---C---D'---E'  main

rebase를 실행하면 각 개발자가 작업 중인 feature 브랜치에서 main의 최신 커밋과의 충돌을 해결하고 PR을 요청하게 되면서 협업이 원활해질 수 있다.

profile
문제를 컴퓨터로 해결하는 데서 즐거움을 찾는 프론트엔드 개발자

0개의 댓글

관련 채용 정보