프로젝트의 흐름(gitflow)

master 브렌치: 실질적으로 개발을 하지 않고 이용자에게 제공 되어진 커밋만 존재한다.
develop 브렌치: maseter로 부터 파생되어 실질적인 개발이 이루어진다.
feature 브렌치: develop 브렌치에서 개발을 진행 하다가 무언가 특징적인 것을 만들어야 할때 develop 브렌치에서 파생 된 별도의 feature 브렌치를 만들어 개발을 한다.
작업이 끝난 후엔 develop 브렌치로 가져온다.
release 브렌치: develop 브렌치에서 작업한 결과를 사용자들에게 배포 할 때 release 브렌치를 만들어 사용한다.
이 후에 발생한 버그의 수정이나 문서의 업데이트는 release 브렌치 안에서 작업하고 그 작업이 끝날때 마다 develop 브렌치에 틈틈이 병합을 해준다.
충분한 test 작업을 마치고 master 브렌치로 변경사항을 병합하고 tag로 버전을 표시한다.
그와 동시에 develop 브렌치에도 병합을 해준다.
hotfix 브렌치: 마스터 브렌치에서 긴급하게 문제를 해결해야 될 경우 hotfix 브렌치를 만들어 해당 버그를 수정하고 마스터 브렌치로 병합을 한 후 tag로 버전을 표시한다.
그와 동시에 develop 브렌치에도 병합을 해준다.
실습하기
git init
vim f1.txt ("this is master branch 1")
git add f1.txt
git commit -m "master"
git remote add origin https://github.com/jinzza456/gitflow.git
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout -b develop
Switched to a new branch 'develop'
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ vim f1.txt ("내용 추가")
$ git commit -am "develop1"
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git checkout -b feature-some(무슨기능인지 알아보기 쉽게)
Switched to a new branch 'feature-some'
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (feature-some)
$ vim f1.txt ("내용 추가")
$ git commit -am "feature-some1"
*git log
* f02b490 (HEAD -> feature-some) feature-some1
* 2c3f2d5 (develop) develop1
* edbdfd3 (master) master
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge feature-some
Updating 2c3f2d5..f02b490
Fast-forward
f1.txt | 1 +
1 file changed, 1 insertion(+)
*git log
* f02b490 (HEAD -> develop, feature-some) feature-some1
* 2c3f2d5 develop1
* edbdfd3 (master) master
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git branch -d feature-some
Deleted branch feature-some (was f02b490).
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git checkout -b release-1.0
Switched to a new branch 'release-1.0'
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (release-1.0)
$ vim f1.txt
$ git commit -am "release 1"
*git log
* 0c1a2ff (HEAD -> release-1.0) release 1
* f02b490 (develop) feature-some1
* 2c3f2d5 develop1
* edbdfd3 (master) master
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (release-1.0)
$ git checkout master
Switched to branch 'master'
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git merge release-1.0
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git tag -a 1.0 -m "first release" master
*git log
* 0c1a2ff (HEAD -> master, tag: 1.0, release-1.0) release 1
* f02b490 (develop) feature-some1
* 2c3f2d5 develop1
* edbdfd3 master
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout develop
Switched to branch 'develop'
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge release-1.0
*git log
* 0c1a2ff (HEAD -> develop, tag: 1.0, release-1.0, master) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master
모든 브렌치가 최신 커밋인 상태가 되었다.
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout -b hotfix-some
Switched to a new branch 'hotfix-some'
$ vim f1.txt
$ git commit -am "hotfix1"
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git merge hotfix-some
$ git tag -a 1.1 -m "hotfix some" master
*gitlog
* 988c1cb (HEAD -> master, tag: 1.1, hotfix-some) hotfix1
* 0c1a2ff (tag: 1.0, release-1.0, develop) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master
jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge hotfix-some
*gitlog
* 988c1cb (HEAD -> develop, tag: 1.1, master, hotfix-some) hotfix1
* 0c1a2ff (tag: 1.0, release-1.0) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master
push와 pull의 타이밍
- 새로운 브렌치를 만들기 직전에 pull을 하여 최신 커밋을 확인한다.
- feature 브렌치는 develop 브렌치의 내용을 자주 불러와서(fetch, pull, rebase) 작업 하는 것이 좋다.
- realese 브렌치에서의 변경사항은 자주자주 push를 해준다.
- hotfix 브렌치를 만들면 delvelop 브런치에서도 merge를 해주어야 한다.