Git Merge 전략

숭맹이·2025년 2월 3일
0

1. 기본 Merge 전략

1.1 Fast-forward Merge

Fast-forward는 브랜치가 직선적으로 진행된 경우 발생합니다. 이 경우 Git은 단순히 브랜치 포인터를 앞으로 이동시키는 방식으로 병합합니다.

장점:

  • 커밋 히스토리가 깔끔하게 유지됨
  • 불필요한 병합 커밋이 생기지 않음

단점:

  • 병합 히스토리를 명확히 보기 어려움

사용 예:

git checkout main
git merge feature-branch

1.2 Recursive Merge

Recursive 전략은 기본 병합 방식으로, 두 브랜치 간의 공통 조상을 찾아 삼방 병합(three-way merge)을 수행합니다.

장점:

  • 브랜치의 변경 내역을 명확히 확인 가능
  • 충돌 시 자동 병합 도구 지원

단점:

  • 병합 커밋이 생겨 히스토리가 복잡해질 수 있음

사용 예:

git checkout main
git merge --no-ff feature-branch

2. 고급 Merge 전략

2.1 Squash Merge

Squash는 여러 개의 커밋을 하나로 합쳐 병합하는 전략입니다. 이는 깔끔한 히스토리를 유지하는 데 유용합니다.

장점:

  • 커밋 히스토리가 간결하게 유지됨
  • 피처 브랜치의 상세 커밋 로그를 메인 브랜치에 남기지 않음

단점:

  • 개별 커밋 히스토리가 사라져 디버깅이 어려울 수 있음

사용 예:

git checkout main
git merge --squash feature-branch
git commit -m "Feature implemented"

2.2 Rebase 후 Merge

Rebase는 브랜치 기반을 다른 브랜치의 최신 커밋 위로 옮겨 히스토리를 직선화하는 전략입니다. Rebase 후 병합하면 히스토리가 더욱 깔끔하게 유지됩니다.

장점:

  • 직선적인 히스토리 유지
  • 병합 커밋 없이 깔끔한 기록

단점:

  • 커밋 재작성으로 인한 충돌 가능성 증가
  • 협업 중 리베이스는 주의 필요 (공유 브랜치에서는 위험)

사용 예:

git checkout feature-branch
git rebase main
git checkout main
git merge feature-branch

3. 전략 선택 가이드

  1. 히스토리 유지가 중요한 경우: --no-ff 병합을 사용해 병합 커밋을 명확히 남깁니다.
  2. 깔끔한 히스토리가 필요한 경우: squashrebase 전략을 활용해 불필요한 커밋을 제거합니다.
  3. 대규모 협업 프로젝트: 일반적으로 merge --no-ff를 사용해 각 기능 개발의 독립성을 유지하는 것이 좋습니다.

4. 병합 충돌 해결 전략

병합 시 충돌은 피할 수 없는 문제입니다. 충돌을 효율적으로 해결하기 위해서는 다음과 같은 전략을 따르는 것이 좋습니다.

  1. 작은 단위로 병합: 변경 사항이 적을수록 충돌 가능성이 줄어듭니다.
  2. 자주 pull: 팀원들의 변경 사항을 자주 반영해 최신 상태를 유지하세요.
  3. 자동화 도구 활용: git mergetool과 같은 도구를 활용하면 충돌 해결이 수월해집니다.
profile
👨🏻‍💻 Backend Developer

0개의 댓글