Git은 소스 코드 버전 관리를 위한 강력한 도구로, 여러 개발자가 동시에 작업할 수 있도록 브랜치(Branch) 기능을 제공합니다. 브랜치를 병합(Merge)하는 방법은 여러 가지가 있으며, 각 방법마다 특징과 용도가 다릅니다. 이번 글에서는 Git에서 브랜치를 병합하는 다양한 방법과 그 특징에 대해 알아보겠습니다.
Fast-forward Merge는 브랜치가 분기되지 않고, 병합 대상 브랜치가 현재 브랜치의 커밋 이후에 바로 이어지는 경우 사용됩니다. 이 방법은 커밋 히스토리가 단순하며, 불필요한 병합 커밋을 만들지 않습니다.
# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# fast-forward merge 수행
git merge feature
특징:
Recursive Merge는 두 개의 브랜치가 공통 조상(commit ancestor)에서 분기된 이후 각각의 작업이 이루어진 경우 사용됩니다. Git은 공통 조상 커밋과 현재 브랜치 및 병합할 브랜치의 마지막 커밋을 비교하여 병합 커밋을 생성합니다.
# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# recursive merge 수행
git merge feature
특징:
Squash Merge는 병합 대상 브랜치의 모든 커밋을 하나로 합친 후 현재 브랜치에 병합합니다. 이 방법은 커밋 히스토리를 깔끔하게 유지하고 싶을 때 유용합니다.
# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# squash merge 수행
git merge --squash feature
# 병합 커밋 생성
git commit -m "Merge feature branch"
특징:
Rebase는 특정 브랜치의 커밋을 다른 브랜치의 커밋 이후로 재배치합니다. 이는 병합 커밋을 생성하지 않으며, 커밋 히스토리를 깔끔하게 유지합니다. 다만, 공개 저장소에서는 Rebase를 사용할 때 주의가 필요합니다.
# 브랜치 rebase 대상인 feature 브랜치를 체크아웃
git checkout feature
# main 브랜치로 rebase 수행
git rebase main
# feature 브랜치를 main 브랜치에 merge
git checkout main
git merge feature
특징:
Merge Commit은 항상 병합 커밋을 생성하여 병합 작업을 명확하게 기록하는 방법입니다. 이 방법은 병합 작업의 이력을 명확히 남기고 싶을 때 유용합니다.
# 브랜치 merge 대상인 feature 브랜치를 체크아웃
git checkout main
# 병합 커밋을 생성하여 merge 수행
git merge --no-ff feature
특징:
Git에서 브랜치를 병합하는 다양한 방법들은 각각의 용도와 특징이 있습니다. 프로젝트의 특성과 필요에 맞게 적절한 병합 방법을 선택하여 사용하는 것이 중요합니다. Fast-forward Merge는 히스토리가 단순한 경우, Recursive Merge는 일반적인 병합 상황에서, Squash Merge는 깔끔한 히스토리를 원할 때, Rebase는 일직선의 히스토리가 필요할 때, Merge Commit은 명확한 병합 이력이 필요할 때 유용합니다. 각 방법의 장단점을 잘 이해하고 상황에 맞게 활용하시기 바랍니다.