2025-07-26 22:18

Status:

Tags:데브옵스

깃 병합

여러 개발자가 개발하고 여러 브랜치들과 코드 변경 내용들을 어떻게 하나로 합칠 것인가의 전략 충돌 자체와는 별개로 여러명이 동시에 코드를 수정할때 이를 어떻게 다시 하나로 합칠 것인지에 대한 전략

주요 전략

1. 패스트 포워드 머지 Fast-Forward Merge

대상 브랜치가 소스 브랜치로부터 분기된 다음 새로운 커밋 없을때 즉 그냥 갖다 붙이면 될때, 충돌은 없지만 테스트 등이 추가될 수 있으니 중요한 머지 전략

Before:   A---B (main)
               \
                C---D (feature)

After:    A---B---C---D (main)

2. 3-웨이 머지 3-Way Merge (Recursive Merge)

기본 병합 전략, 두 브랜치의 공통 조상 커밋 비교해서 새로운 병합 커밋 생성

  1. 내 브랜치 커밋
  2. 남의 브랜치 커밋
  3. 두 브랜치의 공통 조상이 되는 커밋 만약 같은 부분 안건드렸으면 그냥 그대로 서로 다른 부분 합쳐서 머지되고 만약 같은 부분 건드렸으면 두 코드를 비교해서 충돌 해결한 다음에 머지
Before:   A---B---C---F (main)
               \
                D---E (feature)

After:    A---B---C---F---G (main)
               \         /
                D---E---/

3. 스쿼시 머지 Squash and Merge

여러 커밋을 메인에 올리기 전에 하나로 압축한 다음 병합 작은 기능이거나 히스토리 깔끔하게 만들고 싶을때

Before:   A---B---C (main)
               \
                D---E---F (feature)

After:    A---B---C---G (main)
          (G는 D+E+F의 통합 커밋)

4. 리베이스 머지

브랜치 베이스를 다른 커밋으로 이동시켜 선형적인 히스토리 만드는 전략 re-base: 베이스를 다시 설정한다. 베이스는 현재 브랜치가 분기된 지점의 커밋 베이스를 타겟 브랜치의 최신 커밋으로 변경

일반적인 3 way 머지의 경우 진짜 역사를 기록하는 진실성 이 핵심이라면 리베이스의 경우 히스토리를 재작성 해서 가독성 이 핵심이다.

리베이스의 경우 히스토리 자체를 바꿔버리기 때문에 공개 브랜치에서는 절대 리베이스 머지하면 안된다. 히스토리를 건드리고 깔끔해지는 것 말고는 큰 장점 없어서 지나치게 더러운 상황에서 숙련자가 건드는게 좋을듯

Before:   A---B---C---F (main)
               \
                D---E (feature)

After:    A---B---C---F---D'---E' (main)
          (D', E'는 리베이스된 새로운 커밋)

References

깃 병합 전략 핸드북_ 초보자에서 중급자까지 Rebase 머지 상세 가이드_ 초보자에서 중급자까지