Git flow란?
Git flow란 크게 5가지 종류의 브랜치를 가지고 Git을 운영하는 브랜치 기법 중 하나다.
브랜치의 구성은 우리에게 익숙한 master와 develop 그리고 추가적으로 feature, release, hotfix 브랜치가 있다.
전체적인 큰 그림을 일단 보고가자.
처음에 보면 되게 복잡해보이고 그러는데(나만 그랬나), 이해하고 나면 명쾌하고 꽤 좋은 모델이라고 느끼게 된다.

보자마자 뭔소리야 라고 외친 나같은 사람들을 위해 각각 브랜치의 목적을 정리해보자면 다음과 같다.
master 브랜치는 항상 제품으로 출시될 수 있는 상태여야 한다. 한마디로 진짜 출시될 브랜치다.
develop 브랜치는 master로부터 파생된 브랜치로 다음 출시 버전을 개발하는 브랜치다.
feature 브랜치는 기능을 개발하는 local 브랜치다.
release 브랜치는 이번 출시를 준비하는 local 브랜치다.
hotfix 브랜치는 출시 버전(master)에서 발생한 버그를 수정하는 local 브랜치다.
자 한 단계씩 알아보자.
feature
feature 브랜치는 앞서 말했듯 기능을 개발하는 브랜치로 develop 브랜치로부터 파생되는 브랜치다.
origin에 업로드하는 것은 아니고 개발자의 local에만 존재하며 기능 개발이 끝나면 develop에 merge가 되면서 삭제된다.
이렇게 한 기능씩 추가해나가다 보면 어느덧 출시할 제품이 만들어질 것이다.
develop
feature 브랜치에서 하나씩 하나씩 기능을 완성시키다보면 어느덧 출시할 제품이 완성될 것이다.
이렇게 develop 브랜치에서는 feature 브랜치에서 모아진 제품을 바탕으로 release 브랜치를 파생시키게 된다.
release
release 브랜치는 이번 출시를 목적으로 생성되며, feature 브랜치와 마찬가지로 local에만 존재한다.
여기에서 모든 테스트를 거쳐 통과가 된 제품은 master로 옮겨지며 출시과정을 거치게 되는 것이다.
만약 이 단계에서 버그가 발견되면 이 브랜치에서 버그를 수정하고 develop 브랜치와 master 브랜치에 merge를 해야한다.
이렇게해야 수정된 버전도 develop 브랜치에 반영되기 때문이다.
이렇게 테스트를 성공적으로 마친 제품은 master와 develop 브랜치에 merge 되면서 release 브랜치는 삭제된다.
master
이제 거의 다왔다.
master 브랜치는 앞서 말했듯 출시될 제품이므로 별다른 설명이 필요없다.
이 브랜치에서 제품을 출시하면 된다.
그런데 만약 출시 후 버그가 발견되면 어떻게 해야할까?
그래서 hotfix 브랜치가 존재한다.
hotfix
release에서 모든 테스트에 통과했다고 하더라도 종종 생각지도 못하는 곳에서 버그가 발견되곤 한다.
그럴때 이 hotfix 브랜치에서 작업을 하고, 완료가 되면 master와 develop에 merge하고 브랜치를 삭제한다.
정리
결국 origin에는 항상 master와 develop만 존재하게 된다.
각 기능에 맞는 브랜치를 관리하면서 명확하고 깔끔하게 브랜치를 관리할 수 있게 된다.
물론 모든 프로젝트에 적용되는 만능은 아니지만 확실히 좋다는 느낌을 많이 받았다.
참고로 Sourcetree 같은 Git Client에서도 Git flow를 지원하기 때문에 merge와 브랜치 삭제 등 귀찮은 작업들을 알아서 해주니 참 편한 것 같다.