๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ณต๋ถ€

Git Branch์˜ ๋™์ž‘ ์›๋ฆฌ์™€ ํšจ์œจ์ ์ธ ํ˜‘์—… ์ „๋žต (Git-flow)

by greenbrachio 2026. 5. 6.

Git ๋ธŒ๋žœ์น˜๋Š” ์™œ '๊ฐ€๋ฒผ์šด'๊ฐ€?

ํ˜‘์—… ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ '๋ธŒ๋žœ์น˜(Branch)'๋Š” ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. SVN๊ณผ ๊ฐ™์€ ๊ณผ๊ฑฐ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ, Git์˜ ๋ธŒ๋žœ์น˜๋Š” ์ƒ์„ฑ๊ณผ ์ „ํ™˜์ด ๋งค์šฐ ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” Git์ด ๋ธŒ๋žœ์น˜๋ฅผ 'ํŒŒ์ผ์˜ ๋ณต์‚ฌ๋ณธ'์ด ์•„๋‹Œ, ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” '40๋ฐ”์ดํŠธ์งœ๋ฆฌ ํฌ์ธํ„ฐ'๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” Git ๋ธŒ๋žœ์น˜์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๋ถ€ํ„ฐ, ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋žœ์นญ ์ „๋žต์ธ Git-flow๊นŒ์ง€ ์ƒ์„ธํžˆ ๋ถ„์„ํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. Git ๋ธŒ๋žœ์น˜์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ: ํฌ์ธํ„ฐ์˜ ์ดํ•ด

๋งŽ์€ ์ดˆ๋ณด์ž๊ฐ€ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๋ฉด ํ”„๋กœ์ ํŠธ ํด๋”๊ฐ€ ํ†ต์งธ๋กœ ๋ณต์‚ฌ๋œ๋‹ค๊ณ  ์˜คํ•ดํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Git ๋‚ด๋ถ€๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ์›๋ฆฌ๋Š” ํ›จ์”ฌ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค.

1.1. ์ปค๋ฐ‹(Commit)๊ณผ ์Šค๋ƒ…์ƒท

Git์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ, Git์€ ์ˆ˜์ •๋œ ํŒŒ์ผ์˜ ์Šค๋ƒ…์ƒท์„ ์ฐ๊ณ  ํ•ด๋‹น ์Šค๋ƒ…์ƒท์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹ ๊ฐœ์ฒด(Commit Object)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปค๋ฐ‹ ๊ฐœ์ฒด์—๋Š” ์ด์ „ ์ปค๋ฐ‹(Parent)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด, ์ „์ฒด์ ์ธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

1.2. ๋ธŒ๋žœ์น˜๋Š” ๋‹จ์ˆœํ•œ ํฌ์ธํ„ฐ๋‹ค

Git์—์„œ ๋ธŒ๋žœ์น˜๋Š” ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ€๋ณ€ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜์ธ main(๋˜๋Š” master) ์—ญ์‹œ ํŠน๋ณ„ํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ, ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ํฌ์ธํ„ฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ƒˆ๋กœ์šด ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“œ๋Š” ์ž‘์—…์— ๋ถˆ๊ณผํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ๊ฑฐ์˜ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1.3. HEAD์˜ ์—ญํ• 

์ง€๊ธˆ ๋‚ด๊ฐ€ ์–ด๋–ค ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š”์ง€ Git์€ ์–ด๋–ป๊ฒŒ ์•Œ๊นŒ์š”? ๋ฐ”๋กœ 'HEAD'๋ผ๋Š” ํŠน๋ณ„ํ•œ ํฌ์ธํ„ฐ ๋•๋ถ„์ž…๋‹ˆ๋‹ค. HEAD๋Š” ํ˜„์žฌ ์ฒดํฌ์•„์›ƒ๋œ ๋ธŒ๋žœ์น˜, ์ฆ‰ '์ง€๊ธˆ ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜'๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

 

2. ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ(Merge)์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹

๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ๋ฉ”์ธ ์ค„๊ธฐ๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ Git์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

2.1. Fast-forward ๋ณ‘ํ•ฉ

๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ์ง์ ‘์ ์ธ ์ดํ›„ ์ปค๋ฐ‹์ผ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํ•ฉ์น˜๊ธฐ ์ž‘์—… ์—†์ด, ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๋ฅผ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ๋‹จ์ˆœํžˆ '์•ž์œผ๋กœ ์ด๋™'์‹œํ‚ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์ผ์ง์„ ์œผ๋กœ ๋‚จ๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

2.2. 3-way Merge (Recursive)

๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐˆ๋ผ์ง„ ์ดํ›„, ๋‘ ๋ธŒ๋žœ์น˜ ๋ชจ๋‘์— ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Git์€ ๋‘ ๋ธŒ๋žœ์น˜์˜ ๊ณตํ†ต ์กฐ์ƒ(Common Ancestor)์„ ์ฐพ์•„ ์ด 3๊ฐœ์˜ ํฌ์ธํŠธ(๊ณตํ†ต ์กฐ์ƒ, ๋ธŒ๋žœ์น˜ A ๋, ๋ธŒ๋žœ์น˜ B ๋)๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒˆ๋กœ์šด '๋ณ‘ํ•ฉ ์ปค๋ฐ‹(Merge Commit)'์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

3. ์‹ค๋ฌดํ˜• ๋ธŒ๋žœ์น˜ ์ „๋žต: Git-flow ๋ชจ๋ธ

ํ˜ผ์ž ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์‹œ์— ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์ฒด๊ณ„์ ์ธ ๊ทœ์น™์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ '๋ธŒ๋žœ์นญ ์ „๋žต'์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด Git-flow์ž…๋‹ˆ๋‹ค.

Git-flow๋Š” ํฌ๊ฒŒ 5๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค.

  • Main (Master): ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์˜ ์ฝ”๋“œ๋งŒ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
  • Develop: ๋‹ค์Œ ์ถœ์‹œ ๋ฒ„์ „์„ ์œ„ํ•ด ๊ฐœ๋ฐœ ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ๋ชจ์ด๋Š” ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
  • Feature: ๋‹จ์œ„ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค. develop์—์„œ ๊ฐˆ๋ผ์ ธ ๋‚˜์™€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ›„ ๋‹ค์‹œ develop์œผ๋กœ ํ•ฉ์ณ์ง‘๋‹ˆ๋‹ค.
  • Release: ๋ฐฐํฌ ์ „ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ QA๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • Hotfix: ์ถœ์‹œ๋œ ๋ฒ„์ „(Main)์—์„œ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ฝ”๋“œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4. ์ถฉ๋Œ(Conflict) ํ•ด๊ฒฐ๊ณผ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•

๋ณ‘ํ•ฉ ๊ณผ์ •์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๊ฐ™์€ ๋ผ์ธ์„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ '์ถฉ๋Œ'์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Git์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์„ ํŠน์ˆ˜ ๊ธฐํ˜ธ(<<<<, ====, >>>>)๋กœ ํ‘œ์‹œํ•ด ์ค๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด ๋ถ€๋ถ„์„ ์ง์ ‘ ํ™•์ธํ•˜์—ฌ ์ตœ์ข… ์ฝ”๋“œ๋ฅผ ๊ฒฐ์ •ํ•œ ๋’ค git add์™€ git commit์„ ํ†ตํ•ด ๋ณ‘ํ•ฉ์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Rebase vs Merge: ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Merge ๋Œ€์‹  Rebase๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Rebase๋Š” ๋ธŒ๋žœ์น˜์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋งˆ์น˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„๊ธฐ์—์„œ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ •๋ ฌํ•ด ์ค๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋ฏธ ์›๊ฒฉ ์ €์žฅ์†Œ์— Push๋œ ์ปค๋ฐ‹์— ๋Œ€ํ•ด์„œ๋Š” Rebase ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘์€ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๋กœ๋ถ€ํ„ฐ

Git ๋ธŒ๋žœ์น˜๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜์˜ ํฌ์ธํ„ฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ํŒ€์˜ ๊ทœ๋ชจ์™€ ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ์— ๋งž๋Š” ๋ธŒ๋žœ์นญ ์ „๋žต์„ ๋„์ž…ํ•œ๋‹ค๋ฉด, ๋” ์•ˆ์ •์ ์ด๊ณ  ์ „๋ฌธ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.