Git에서 branch merge 방법들과 각 방법의 특징을 설명해 주세요.
merge를 하는 방식에는 fast-forword-merge와 3-way-merge가 있습니다.
A와 B branch가 있다고 가정해보고,
A branch -> B branch로 merge를 하려고 하는데
B가 A 이후의 커밋을 가리키고 있을 때
A는 단순히 B와 동일한 커밋을 가리키도록 이동합니다.
즉, 단순히 포인터를 최신 커밋으로 옮기는 것을 의미합니다.
3way merge는 서로 다른 브랜치에 공통된 조상인 base branch를 기점으로 충돌을 최소화시키는 방법입니다. merge를 할 때 각 브랜치의 마지막 커밋 두 개와, 브랜치의 공통 조상 커밋 총 3개의 커밋을 비교해서 새로운 커밋을 만들어 병합합니다.
Git Flow 브랜치 전략에 대해 설명해 주세요.
Git Flow는 크게 Main 브랜치, Develop 브랜치, Supporting 브랜치로 구분하여 브랜치를 관리합니다.
Supporting 브랜치는 또 Feature 브랜치, Release 브랜치, Hotfix 브랜치로 나뉩니다.
Main 브랜치는 출시 가능한 프로덕션 코드를 모아두는 브랜치입니다.
프로젝트를 시작할 때 생성되며 개발 프로세스 전반에 걸쳐 유지됩니다.
버전 개발을 위한 코드를 모아두는 브랜치로, 개발이 완료되면 Main 브랜치로 머지됩니다.
하나의 기능을 개발하기 위한 브랜치로 Develop 브랜치에서 생성하며,
기능 개발이 완료되면 Develop으로 머지됩니다.
주의할 점은 Fast-forword로 머지하지 않고 Merge Commit을 생성하며 머지를 해주어야 합니다. (히스토리가 특정 기능 단위로 묶일 수 있게)
소프트웨어 배포 준비를 위한 브랜치입니다. Develop 브랜치에서 생성하며,
버전 이름 등의 소소한 데이터를 수정하거나 배포 전에 자잘한 버그를 수정하기 위해 사용됩니다.
배포 준비가 완료되면 Main, Develop 브랜치에 둘 다 머지합니다.
이미 배포된 버전에 문제가 생겼을 때 이 브랜치를 사용해 문제를 해결합니다.
Main 브랜치에서 생성하며, 문제 해결이 완료되면 Main, Develop 브랜치에 둘 다 머지합니다.