브랜치 merge의 종류

소연·2023년 10월 27일
1

개요

아래 그림과 같은 상황이 있다. 여기에서 feat 브랜치를 main 브랜치로 머지하고 싶다.

feat 브랜치를 main 브랜치로 머지한다는 것은 feat 이라는 브랜치에서 개발한 기능을 주 코드 흐름인 main 브랜치에 편입시켜 새로운 기능을 추가하겠다는 의미로 해석할 수 있다. 이를 github에서 수행할 때 크게 세가지 옵션이 있다. 각 방법으로 머지를 수행하면 feat이라는 기능이 main에 추가된다는 결과는 동일하지만, 커밋 히스토리 관리와 브랜치 복잡도 관리 등의 차원에서 각각의 장단점이 존재한다. 세 가지 방식은 다음과 같다.

  • merge commit을 만들며 합치기
  • squash and merge
  • rebase and merge

세 가지 머지 방식

1. merge commit을 만들며 합치기

  • feat 브랜치의 마지막 커밋과 main 브랜치의 마지막 커밋을 합친 머지 커밋을 main 브랜치에 생성한다.
  • feat 브랜치의 개발 이력이 남는 장점이 있는 한편 프로젝트가 커지고 참여자가 많아질수록 복잡한 브랜치구조를 만들 위험이 있다.
  • 1기능구현 3커밋이력이 된다.
    main 브랜치에서 커밋 로그를 조회했을 때, feat 브랜치의 a,b,c 커밋 로그까지 모두 찍힌다. 하나의 기능을 구현했을 때 이를 하나의 커밋으로만 남기고 싶으면 적절하지 않은 머지 방식

2. squash and merge

  • feat 브랜치의 개발 이력을 하나로 합친 후 (squash) 새로운 커밋을 main 브랜치에 생성한다.
  • 커밋 히스토리를 간단하게 유지할 수 있다는 장점이 있는 한편 feat 브랜치의 개발 이력이 사라져 추후 문제 해결에 어려움이 생길 수도 있다.
  • 1기능구현 1커밋 이력
    위의 방법과 달리 feat이라는 하나의 기능을 구현한 기록을 커밋 하나로 남길 수 있다는 장점이 있다.

3. rebase and merge

  • feat 브랜치를 떼다가 main 브랜치 끝에 잇는다.
  • feat 브랜치의 히스토리를 유지하면서도 main 브랜치 히스토리를 선형적으로 유지할 수 있다는 장점이 있다.
  • 하지만 main 브랜치에서 봤을 때 어디서부터 어디까지가 feat 기능을 구현하기 위한 커밋이었는지 식별하기 어렵다는 단점이 있다.
profile
배우고 정리해요

0개의 댓글