Git branch merge 방법
Merge 종류
Merge의 종류에는 3가지가 존재합니다.
Create a Merge Commit
이 방법은 두 브랜치의 히스토리를 유지하면서 병합합니다. 새로운 'merge commit'을 만들어 두 브랜치의 변경사항을 통합합니다.
예시
두개의 브랜치 feature 과 main이 있는 상태라고 가정했을때 feature 브랜치에는 새로운 기능에 대한 커밋들이 있고, main 브랜치는 최신 배포 상태를 반영합니다. 여기서 feature 브랜치를 main 에 병합하면서 merge commit을 생성하면, 두 브랜치의 변경사항이 통합된 새로운 커밋이 main에 추가 됩니다.
이처럼 어떠한 프로젝트의 완전한 히스토리를 유지하고 싶을 때 가장 적합합니다. 일반적으로도 가장 많이 사용되고 기본값으로 설정되어 있습니다.
Squash and merge
이 방법에서는 브랜치의 모든 커밋을 단일 커밋으로 합친 후, 이를 대상 브랜치에 병합합니다.
예시
feature 브랜치에 여러 개의 작은 커밋이 있다고 가정하면 이 브랜치를 main에 병합할 때, 모든 커밋을 하나의 커밋으로 합쳐 main에 추가합니다. 이렇게 하면 main 브랜치의 히스토리가 간결해지고, feature 브랜치의 변경사항이 단일 커밋으로 관리됩니다.
Squash and merge는 깔끔한 히스토리를 유지하고 싶을 때 좋다고 생각이 듭니다. 또한 작은 변경사항이나 빠른 수정이 많은 브랜치에 유용합니다.
Rebase and merge
이 방법은 병합하려는 브랜치의 커밋들을 대상 브랜치의 끝에 다시 적용(Reapply)합니다. 이로 인해 선형적인 히스토리가 만들어집니다.
예시
feature 브랜치가 main 브랜치보다 뒤에 있을 때, rebase and merge를 사용합니다. feature 브랜치의 커밋들을 main 브랜치의 최신 커밋 뒤에 재배치합니다. 이렇게 하면 main 브랜치에 feature 브랜치의 커밋들이 마치 순차적으로 진행된 것처럼 보이게 됩니다. 이 방법은 복잡한 병합 충돌을 줄이고, 히스토리를 선형적으로 유지하는 데 도움이 됩니다.
주로 브랜치의 히스토리를 선형적으로 유지하고 싶을 때 사용합니다. 3가지 방법중 보기에도 가장 깔끔하고, 또한 버전 관리에도 유용합니다.
결론
이 3가지 방법은 각각의 상황과 프로젝트 요구사항에 따라 선택되는 경로가 다르다고 생각합니다.
각각의 단점들도 생각해보면 Create a Merge Commit은 여러 브랜치에서 자주 병합할 경우에 히스토리가 복잡해져서 후에 검색하고 찾는데 불편함을 줄 수 있습니다.
Squash and Merge 도 여러 커밋이 하나로 합쳐지기 때문에, 개별 커밋의 세부적인 히스토리가 없어 이는 후에 특정 변경사항을 추적하고자 할 때 문제가 될 수 있습니다.
Rebase and Merge에서는 rebase 과정에서 충돌(Conflict)이 발생할 수 있으며, 특히 큰 프로젝트에서는 이를 해결하는 것이 복잡할 수도 있다고 생각합니다.
이처럼 각 merge 전략의 특징이나 장/단점을 고려하여 요구사항과 작업 방식에 가장 적합한 merge 전략을 선택하는 것이 중요합니다.