[Week 3-1] Git에서 Branch Merge 방법들과 각 방법의 특징

BossTeemo·2024년 6월 8일
0

위클리페이퍼

목록 보기
4/15
post-thumbnail
post-custom-banner

Git에서 Branch Merge 방법들과 각 방법의 특징

Git은 소스 코드 버전 관리를 위한 강력한 도구로, 여러 개발자가 동시에 작업할 수 있도록 브랜치(Branch) 기능을 제공합니다. 브랜치를 병합(Merge)하는 방법은 여러 가지가 있으며, 각 방법마다 특징과 용도가 다릅니다. 이번 글에서는 Git에서 브랜치를 병합하는 다양한 방법과 그 특징에 대해 알아보겠습니다.

1. Fast-forward Merge

Fast-forward Merge는 브랜치가 분기되지 않고, 병합 대상 브랜치가 현재 브랜치의 커밋 이후에 바로 이어지는 경우 사용됩니다. 이 방법은 커밋 히스토리가 단순하며, 불필요한 병합 커밋을 만들지 않습니다.

# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# fast-forward merge 수행
git merge feature

특징:

  • 간단함: 불필요한 병합 커밋이 생성되지 않음.
  • 커밋 히스토리: 커밋 히스토리가 일직선으로 유지됨.

2. Recursive Merge (3-way Merge)

Recursive Merge는 두 개의 브랜치가 공통 조상(commit ancestor)에서 분기된 이후 각각의 작업이 이루어진 경우 사용됩니다. Git은 공통 조상 커밋과 현재 브랜치 및 병합할 브랜치의 마지막 커밋을 비교하여 병합 커밋을 생성합니다.

# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# recursive merge 수행
git merge feature

특징:

  • 복잡한 히스토리: 병합 커밋이 생성되어 히스토리가 복잡해질 수 있음.
  • 충돌 해결: 병합 과정에서 충돌이 발생할 수 있으며, 이를 해결해야 함.

3. Squash Merge

Squash Merge는 병합 대상 브랜치의 모든 커밋을 하나로 합친 후 현재 브랜치에 병합합니다. 이 방법은 커밋 히스토리를 깔끔하게 유지하고 싶을 때 유용합니다.

# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# squash merge 수행
git merge --squash feature
# 병합 커밋 생성
git commit -m "Merge feature branch"

특징:

  • 커밋 히스토리: 병합 대상 브랜치의 커밋을 하나로 합쳐 히스토리를 단순화함.
  • 세부 히스토리: 병합 대상 브랜치의 세부 커밋 히스토리가 사라짐.

4. Rebase

Rebase는 특정 브랜치의 커밋을 다른 브랜치의 커밋 이후로 재배치합니다. 이는 병합 커밋을 생성하지 않으며, 커밋 히스토리를 깔끔하게 유지합니다. 다만, 공개 저장소에서는 Rebase를 사용할 때 주의가 필요합니다.

# 브랜치 rebase 대상인 feature 브랜치를 체크아웃
git checkout feature
# main 브랜치로 rebase 수행
git rebase main
# feature 브랜치를 main 브랜치에 merge
git checkout main
git merge feature

특징:

  • 커밋 히스토리: 깔끔하고 일직선의 히스토리를 유지함.
  • 복잡성: 충돌 발생 시 해결 과정이 복잡할 수 있음.
  • 주의 사항: 공개 저장소의 커밋 히스토리를 변경하면 안됨.

5. Merge Commit (--no-ff)

Merge Commit은 항상 병합 커밋을 생성하여 병합 작업을 명확하게 기록하는 방법입니다. 이 방법은 병합 작업의 이력을 명확히 남기고 싶을 때 유용합니다.

# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# 병합 커밋을 생성하여 merge 수행
git merge --no-ff feature

특징:

  • 병합 이력: 병합 커밋이 명확하게 기록됨.
  • 커밋 히스토리: 병합 커밋으로 인해 히스토리가 복잡해질 수 있음.

결론

Git에서 브랜치를 병합하는 다양한 방법들은 각각의 용도와 특징이 있습니다. 프로젝트의 특성과 필요에 맞게 적절한 병합 방법을 선택하여 사용하는 것이 중요합니다. Fast-forward Merge는 히스토리가 단순한 경우, Recursive Merge는 일반적인 병합 상황에서, Squash Merge는 깔끔한 히스토리를 원할 때, Rebase는 일직선의 히스토리가 필요할 때, Merge Commit은 명확한 병합 이력이 필요할 때 유용합니다. 각 방법의 장단점을 잘 이해하고 상황에 맞게 활용하시기 바랍니다.

profile
1인개발자가 되겠다
post-custom-banner

0개의 댓글