깃 흐름? git flow가 뭐냐고 물으신다면 브랜칭 기법이라고 말씀드릴 수 있습니다. 프로젝트를 진행하면서 수많은 브랜치를 생성하고 병합합니다. 이러한 수많은 브랜칭 작업을 규격화하여 브랜치를 쉽게 다룰 수 있도록 해 주는 규칙, 전략입니다. 브랜칭 모델은 여러 가지가 있지만 git flow는 gui 툴들에서도 기본적으로 기능으로 제공될 정도로 가장 보편화하여있는 모델입니다.

develop과 master 브랜치

develop과 master 브랜치는 중심이 되는 브랜치이며 git flow에서는 무조건 존재해야 하는 브랜치 입니다. develop에서 개발된 프로젝트는 release브랜치를 통해 릴리즈를 준비하며, 릴리즈 준비가 완료되었다면 master 브랜치에 병합하게 됩니다. 이에 대해서는 아래의 release 브랜치에서 자세하게 다루도록 하겠습니다.

Feature 브랜치

Feature 브랜치는 새로운 기능을 추가하기 위해 사용되는 브랜치이며 origin에는 업로드하지 않고, 개발자의 local에서만 존재합니다. 위의 그림을 보면 알 수 있듯이 feature 브랜치는 특정 기능 개발이 필요할 때 develop 브랜치로부터 파생되며 기능 개발이 완료되면 다시 develop 브랜치로 병합됩니다.

feature 브랜치의 이름은 master, develop, release, hotfix 등을 제외한 어떤 이름이든 가능하며, develop 브랜치에 병합시킬 때 --no-ff 옵션을 주어 병합된 히스토리를 기록하는 것이 좋습니다.

Release 브랜치

Release 브랜치는 릴리즈를 준비하기 위한 브랜치 입니다. 지금까지 개발한 기능들을 develop 브랜치로부터 따내어 release 브랜치를 만들고 release 브랜치에서는 발견되는 버그들을 수정하며 릴리즈를 준비합니다. 그동안 develop 브랜치에서는 다음 릴리즈를 위한 개발을 진행합니다.

만약 릴리즈 준비가 완료되었다면 master 브랜치에 병합하며 수정된 버그를 적용하기 위해 develop 브랜치에도 병합하면 됩니다. release 브랜치의 이름은 보통 release-* 또는 release/* 과같이 지정합니다.

Hotfix 브랜치

Hotfix브랜치는 릴리즈된 Product에서 발생한 버그들을 수정하기 위한 브랜치 입니다. 따라서 hotfix 브랜치는 master로부터 파생되며 수정한 버그들을 적용하기 위해 master와 develop 브랜치 모두에 병합됩니다. 만약 release 브랜치가 존재한다면 release 브랜치에도 hotfix 브랜치를 병합하여 다음 릴리즈때 내용이 적용되도록 해야 합니다. hotfix 브랜치의 이름 역시 hotfix-*, hotfix/*과같이 지정합니다.

Reference

https://boxfoxs.tistory.com/347