Git에서 branch merge 방법들과 각 방법의 특징을 설명해 주세요.
git에서 branch merge의 방법은 3가지가 있다
merge commit을 만들며 합치기
이 방식은 두 브랜치의 변경사항을 모두 유지하며 병합하는 것이다.
장점은 브랜치의 히스토리를 모두 유지하며 변경사항을 병합할 수 있다는 것이다.
단점은 커밋 히스토리가 복잡해질 수 있다는 것이다.
squash and merge
이 방식은 브랜치에서 모든 변경사항을 하나의 커밋으로 압축하여 병합하는 방식이다. 병합 후에 하나의 새로운 커밋을 생성한다.
장점은 커밋 히스토리를 간단하게 유지할 수 있다는 것이다.
단점은 작업의 상세한 이력을 잃게된다는 것이다.
rebase and merge
이 방식은 현재 브랜치를 target 브랜치에 재위치 시킨 후 병합하는 방식이다.
이렇게 하면 커밋 히스토리는 선형적으로 유지된다.
장점은 깨끗하고 선형적인 커밋 히스토리를 만들어 준다는 것이다. 이로 인해 히스토리 파악 및 코드의 변화 이해가 더욱 쉬워질 수 있다.
단점은 관련된 커밋의 ID들이 모두 바뀌게 되어 혼란을 초래할 수 있다는 점이다.
Git Flow 브랜치 전략에 대해 설명해 주세요.
git flow에는 5가지 브랜치가 존재한다
master
라이브 서버에 제품으로 출시되는 브랜치
develop
다음 출시 버전을 대비하여 개발하는 브랜치
feature
추가 기능 개발 브랜치
release
다음 버전 출시를 준비하는 브랜치. develop 브랜치를 release 브랜치로 옮긴 후 QA(품질검사), 테스트를 진행하고 master 브랜치로 합친다
hotfix
master 브랜치에서 발생한 버그를 수정하는 브랜치
master, develop은 항시 유지되는 메인 브랜치이고 나머지는 merge되면 사라지는 보조 브랜치이다.
branch를 merge할 때 항상 -no-ff 옵션을 붙여 branch에 대한 기록이 사라지는 것을 방지하는 것을 원칙으로 한다.