Git-flow
๐ก Git-flow๋ 10๋ ์ ์ฏค Vincent Driessen์ด๋ผ๋ ์ฌ๋์ด ๊ณ ์ํ Workflow๋ก ์์ ์ ํต์ผ์ฑ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. Git์ผ๋ก ํ์ ํ๋ฉฐ ๊ฐ๋ฐ์๋ค ๊ฐ๊ฐ์ด ์์ฑํ ์ฝ๋๋ฅผ ํฉ์น๊ณ ๋ฐฐํฌํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ Git-flow์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
Git-flow์ branch
Git-flow๋ ์ด 5๊ฐ์ง์ branch๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- master: ๊ธฐ์ค์ด ๋๋ branch๋ก ์ ํ์ ๋ฐฐํฌํ๋ branch์ ๋๋ค.
- develop: ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ๊ฐ๋ฐ branch๋ก ๊ฐ๊ฐ ์์ ํ ๊ธฐ๋ฅ(feature)๋ค์ ํฉ์น๋ branch์ ๋๋ค.
- feature: ๊ธฐ๋ฅ ๋จ์๋ก ๊ฐ๋ฐํ๋ branch๋ก ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop branch์ ํฉ์นฉ๋๋ค.
- ํด๋น branch๋ ๋ณดํต ๊ฐ๋ฐ์ ์ ์ฅ์์๋ง ์๊ณ origin์๋ pushํ์ง ์์ต๋๋ค.
- ํน์, ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๊ฐ๋ฐ์์ ๊ณต๋์ ์ผ๋ก ๊ฐ๋ฐํ๋ค๋ฉด origin์ ๊ฒ์ํ์ฌ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
- develop์ ๋ณํฉ์ํฌ ๋
--no-ff
์ต์ ์ ์ฃผ์ด ๋ณํฉ๋ ํ์คํ ๋ฆฌ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- release: master branch๋ก ๋ณด๋ด์ ๋ฐฐํฌํ๊ธฐ ์ ์ ํ์ง๊ฒ์ฌ(QA)๋ฅผ ์ํ branch์ ๋๋ค.
- hotfix: master branch๋ก ๋ฐฐํฌํ๋๋ฐ ๋ฒ๊ทธ๊ฐ ์๊ธด๋ค๋ฉด ๊ธด๊ธ ์์ ์ ํ๋ branch ์ ๋๋ค.
Git-flow ์งํ ๊ณผ์
์ด๊ธฐ ์ค์
์ฐ์ ์ ๋๋ก ๋์ํ ์ ์๋๋ก ๊ฐ์ธ ๋ก์ปฌ PC์ ์ค์น๋ฅผ ์งํํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ ๋ Mac OS๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Homebrew
brew install git-flow-avh
๋ก ์ค์น๋ฅผ ์งํํ์์ต๋๋ค.
์ดํ git ์ ์ฅ์ ๋ด์์ git-flow๋ฅผ ์ด๊ธฐํ ํฉ๋๋ค.
git flow init
๋ฅผ ์งํํ๊ณ ๋ชจ๋ ์ง๋ฌธ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ค์ ํด์ฃผ์์ต๋๋ค.
์งํ ๊ณผ์

git flow init
- ์ฐ์ ์์์ master branch์์ ํฉ๋๋ค.
- develop branch๋ ์์ฑํฉ๋๋ค. (๊ฐ๋ฐ์๋ค์ ํด๋น branch์์ ๊ฐ๋ฐ์ ์งํํฉ๋๋ค.)
-
๊ฐ๋ฐ์ ์งํํ๋ฉด์ ๊ธฐ๋ฅ ๊ตฌํ์ด ํ์ํ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๊ฐ๋ฐ์๋ feature branch๋ฅผ ํ๋ ์์ฑํด์ ํด๋น branch์์ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
git flow feature start [feature name]
- ์์ ์ด ์๋ฃ๋๋ฉด
git add . (or [ํ์ผ์ด๋ฆ]) git status git commit -m ['commit msg'] git push origin feature/[feature name] ๊ธฐ๋ฅ์ ๋ง๋ feature branch์ push
- ์๋ชป ์์ฑํ ๊ฒฝ์ฐ
git branch -D feature/[feature name]
โ ์ด๋, ํด๋น ๊ธฐ๋ฅ์ ํ์คํ ๋ฃ์๊ฑฐ๋ผ ํ๋จ๋ ๋ merge๋ฅผ ํ๊ณ ๊ฒฐ๊ณผ๊ฐ ์ค๋ง์ค๋ฌ์ธ ๊ฒฝ์ฐ ์์ ๋ฒ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.
-
์๋ฃ๋ feature branch๋ ๊ฒํ ๊ณผ์ ์ ๊ฑฐ์น ํ ๋ค์ develop branch์ ํฉ์นฉ๋๋ค.
git flow feature finish [feature name]
- develop branch๋ก ์๋ checkout
- feature branch ๋ณ๊ฒฝ ๋ด์ฉ์ ์๋์ develop branch์ merge
-
์์ ์ด ๋๋ feature branch๋ฅผ ์ญ์
-
๋ค๋ฅธ ๊ฐ๋ฐ์์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
git flow feature pull origin [feature name]
-
branch ์ญ์
git branch -d [branch name]
-
branch ๋ณ๊ฒฝ
git checkout [branch name]
-
git flow์ ํ์ฌ branch ๋๋ feature๊ฐ ๋ญ๊ฐ ์๋์ง ๋ณด๊ณ ์ถ์ ๋
git flow init -f
-
๋ชจ๋ ๊ธฐ๋ฅ ๊ตฌํ์ ์๋ฃํ๋ฉด develop branch์์ release branch๋ฅผ ์์ฑํฉ๋๋ค.
git flow release start [release name]
- QA ๋ด๋น์๋ค์ ํด๋น branch์์ ๋ณด์์ ์ ๋ณด์ํ๊ณ ๊ฐ๋ฐ์๋ค์ ๋ฒ๊ทธ๋ฅผ ํฝ์คํฉ๋๋ค. (๋ฒ๊ทธ ์์ ์ฌํญ์ develop branch์๋ ์ ์ฉํด์ฃผ์ด์ผ ํฉ๋๋ค.)
-
๋ชจ๋ ๊ณผ์ ์ด ์๋ฃ๋๋ฉด release branch๋ฅผ master, develop ๊ฐ๊ฐ์ branch๋ก ๋ณด๋ด์ค๋๋ค.
git add . (or [ํ์ผ์ด๋ฆ]) git status git commit -m ['commit msg'] git push origin release/[release name]
git flow release finish [release name]
ํด๋น ๊ณผ์ ์ด ๋๋๊ณ ๋๋ฉด โmasterโ โorigin/masterโ have diverged ๋ผ๋ warning์ด ๋จ๋๋ฐ ์ด๋ master๋ก๊ฐ์ pullํ์ฌ
merge
ํด์ฃผ๋ฉด ํด๊ฒฐ์ด ๋์์ต๋๋ค. (์ฌ์ค ์ฌ๊ธฐ๋ถ๋ถ์ ๋ํ ๊ฒ์ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ๋ง๋์ง ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ ์ด๋ฐ ๊ฒฝ๊ณ ๊ฐ ๋จ๊ฒ ๋์๋์ง์ ์ด์ ์ ๋ํด์ ๋ ์ฐ๊ตฌํด๋ณด์์ผ ํฉ๋๋น..)- release branch๋ฅผ master branch์ ๋ณํฉํฉ๋๋ค.
- release name์ผ๋ก tag๊ฐ ๋ถ์ต๋๋ค. - (๋ณดํต ๋ฒ์ ์ ํ์?)
- develop branch๋ก ์ฌ๋ณํฉ(back-merge)ํฉ๋๋ค.
- release branch๊ฐ ์ญ์ ๋ฉ๋๋ค.
-
merge๋ develop branch์์ ์๊ฒฉ ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค.
git push origin develop
์ด๋ฌ๊ณ ๋๋ฉด, master branch์ pull request๊ฐ ๊ฐ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด master branch์์๋
merge
์์ ์ ์งํํด์ฃผ๊ณ ๋ก์ปฌํ๊ฒฝ์์pull
์ ํด์ค๋๋ค. -
master branch์์๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ฒ์ ํ๊ทธ๋ฅผ ์์ฑํ๊ณ ๋ฐฐํฌ๋ฅผ ์งํํฉ๋๋ค. release ๋ช ์ผ๋ก tag๊ฐ ์์ฑ๋ ๊ฒ์ ๋๋ค.
git push --tags
- ๋ฐฐํฌ ์๋ฃ ํ ๋ฏธ์ฒ ๋ฐ๊ฒฌํ์ง ๋ชปํ ๋ฒ๊ทธ๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ master์์ hotfix branch๋ฅผ ์์ฑํด์ ๊ธด๊ธ ์์ ํ ํ ํ๊ทธ๋ฅผ ์์ฑํด ๋ฐ๋ก ๋ฐฐํฌ๋ฅผ ์งํํฉ๋๋ค.
- hotfix ์์
git flow hotfix start [hotfix name] (์ผ๋ฐ์ ์ผ๋ก ๋ฒ์ ์ ๋ณด๋ฅผ ์๋๋ค.)
git add . (or [ํ์ผ์ด๋ฆ]) git status git commit -m ['commit msg'] git push origin hotfix/[hotfix name]
- hotfix ์๋ฃ
git flow hotfix finish [hotfix name]
๊ทธ ์ธ์..
github-flow
github-flow๋ github๊ฐ Hub์ ์ฑ๊ฒฉ์ผ๋ก ์คํ ์์ค๊ฐ ๊ณต์ ๋๊ณ , ์ฌ๋ฌ ์ฌ๋๋ค์ด pull request๋ฅผ ๋ณด๋ผ ์ ์์ด ๋ณต์กํ๋ค๋ ์๊ฒฌ์ผ๋ก ์๊ธด workflow์ ๋๋ค.
์ฌ๋ฌ ๋ค๋ฅธ branch๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ค์ง main branch ๋ง ๊ด๋ฆฌํฉ๋๋ค.
๋จ, main branch์ ์๊ฒฉํ ๊ถํ์ ๋๊ธฐ ๋๋ฌธ์ pull request์ ์๊ฒฉํ๋ต๋๋ค.
gitlab-flow
gitlab-flow๋ ์ผ๋ฐ์ ์ผ๋ก github-flow์ ๊ฑฐ์ ๋น์ทํ์ง๋ง ์ถ๊ฐ๋ก ์๋๋ฐฐํฌ ๊ธฐ๋ฅ(CI/CD) ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- CI/CD: ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ์๋ํํ์ฌ ์งง์ ์ฃผ๊ธฐ๋ก ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋๋ฌธ์, main branch ํ๋๋ง ๋๊ณ ์์ ํ๊ธฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ง๋ ๋ชจ๋ฅด๋ ์ํฉ ๋๋ฌธ์ ๋ถ์์ ํ ์ ์์ต๋๋ค.
๊ทธ๋์! release branch ๋ฅผ ๋๊ณ ํด๋น branch์์ ๋ชจ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ ํ main branch๋ก merge๋ฅผ ์งํํด ์๋๋ฐฐํฌ๋ฅผ ์งํํ๋๋กํ๋ workflow์ ๋๋ค.
์ฐธ๊ณ
https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html