๐ŸŒณ Git Branch ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ํ˜‘์—…์˜ ํ•„์ˆ˜ ๋„๊ตฌ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

Hyeonio_oยท2025๋…„ 6์›” 22์ผ

BackEnd

๋ชฉ๋ก ๋ณด๊ธฐ
3/9
post-thumbnail

ํ˜ผ์ž์„œ ์ฝ”๋”ฉํ•  ๋•Œ๋Š” ๋ชฐ๋ž์ง€๋งŒ, ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋จผ์ € ๋ถ€๋”ชํžˆ๋Š” ๋ฒฝ์ด ๋ฐ”๋กœ Git Branch์ž…๋‹ˆ๋‹ค. "์™œ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•˜์ง€?" ํ•˜๋ฉฐ ๋จธ๋ฆฌ๋ฅผ ๊ฐ์ŒŒ๋˜ ๊ฒฝํ—˜, ๋‹ค๋“ค ์žˆ์œผ์‹œ์ฃ ?

์˜ค๋Š˜์€ Git Branch์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „ ํ™œ์šฉ๋ฒ•๊นŒ์ง€, ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•ด๋“œ๋ฆด๊ฒŒ์š”! ๐Ÿ’ช


๐Ÿค” Branch๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

์ƒ์ƒํ•ด๋ณด์„ธ์š”. ์นœ๊ตฌ์™€ ํ•จ๊ป˜ ๋ ˆ๊ณ  ์ง‘๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ, ํ•œ ๋ช…์€ 1์ธต์„, ๋‹ค๋ฅธ ํ•œ ๋ช…์€ 2์ธต์„ ๋™์‹œ์— ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋ฉด? ๊ฐ์ž ๋”ฐ๋กœ ๋งŒ๋“  ํ›„ ๋‚˜์ค‘์— ํ•ฉ์น˜๋Š” ๊ฒŒ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ฒ ์ฃ !

Branch๋Š” ๋ฐ”๋กœ ์ด๋Ÿฐ '๋…๋ฆฝ์ ์ธ ์ž‘์—… ๊ณต๊ฐ„'์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

main ๋ธŒ๋žœ์น˜ โ”€โ”€โ”€โ”€โ—‹โ”€โ”€โ”€โ”€โ—‹โ”€โ”€โ”€โ”€โ—‹
                     \
feature ๋ธŒ๋žœ์น˜        โ—‹โ”€โ”€โ”€โ”€โ—‹

โœจ Branch์˜ ํ•ต์‹ฌ ๊ฐœ๋…

์šฉ์–ด์„ค๋ช…
๋ธŒ๋žœ์น˜๋…๋ฆฝ์ ์ธ ์ž‘์—… ๊ณต๊ฐ„ (์ฝ”๋“œ์˜ ๋ถ„๊ธฐ์ )
๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜master(Git) ๋˜๋Š” main(GitHub)
HEADํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

๐Ÿ› ๏ธ Branch ๊ธฐ๋ณธ ์กฐ์ž‘๋ฒ•

1๏ธโƒฃ ๋ธŒ๋žœ์น˜ ํ˜„ํ™ฉ ํŒŒ์•…ํ•˜๊ธฐ

# ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
git branch

# ๊ฒฐ๊ณผ ์˜ˆ์‹œ:
# * main      โ† ํ˜„์žฌ ๋ธŒ๋žœ์น˜ (๋ณ„ํ‘œ๋กœ ํ‘œ์‹œ)
#   feature
#   hotfix

2๏ธโƒฃ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ

# ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
git branch feature-login

# main์—์„œ ํŒŒ์ƒ๋˜๋Š” ๋ธŒ๋žœ์น˜ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑ
git branch feature-login main

3๏ธโƒฃ ๋ธŒ๋žœ์น˜ ์‚ญ์ œํ•˜๊ธฐ

# ๋ธŒ๋žœ์น˜ ์‚ญ์ œ (-D๋Š” ๊ฐ•์ œ ์‚ญ์ œ)
git branch -D feature-login

๐Ÿ’ก ๊ฟ€ํŒ: ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ feature-๋กœ๊ทธ์ธ, fix-๋ฒ„๊ทธ์ˆ˜์ •์ฒ˜๋Ÿผ ์ž‘์—… ๋‚ด์šฉ์„ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•˜์„ธ์š”!


๐Ÿš€ ๋ธŒ๋žœ์น˜ ์ด๋™: checkout vs switch

Git 2.23 ๋ฒ„์ „๋ถ€ํ„ฐ checkout์„ ๋Œ€์ฒดํ•  ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋“ค์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค!

๊ธฐ์กด ๋ฐฉ์‹ (checkout)

# ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ
git checkout feature-login

# ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ + ๋ณ€๊ฒฝ
git checkout -b feature-signup

๐Ÿ†• ์ƒˆ๋กœ์šด ๋ฐฉ์‹ (switch) - ์ถ”์ฒœ!

# ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ
git switch feature-login

# ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ + ๋ณ€๊ฒฝ
git switch -c feature-signup

์™œ switch๋ฅผ ์“ธ๊นŒ์š”?

  • checkout์€ ๊ธฐ๋Šฅ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํ—ท๊ฐˆ๋ฆผ
  • switch๋Š” ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ์—๋งŒ ์ง‘์ค‘
  • ๋” ์ง๊ด€์ ์ด๊ณ  ์•ˆ์ „ํ•จ

๐Ÿ”ง ํŒŒ์ผ ๋ณต์›์˜ ์ƒˆ๋กœ์šด ๊ฐ•์ž: restore

์ฝ”๋”ฉํ•˜๋‹ค๊ฐ€ "์•„, ์ด๊ฑฐ ์›๋ž˜๋Œ€๋กœ ๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค!" ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ทจ์†Œ

# ๐Ÿ†• ์ƒˆ๋กœ์šด ๋ฐฉ์‹ (์ถ”์ฒœ)
git restore README.md

# ๊ธฐ์กด ๋ฐฉ์‹
git checkout -- README.md

์Šคํ…Œ์ด์ง€์—์„œ ํŒŒ์ผ ๋นผ๊ธฐ

# ๐Ÿ†• ์ƒˆ๋กœ์šด ๋ฐฉ์‹ (์ถ”์ฒœ)
git restore --staged README.md

# ๊ธฐ์กด ๋ฐฉ์‹
git reset HEAD README.md

โš ๏ธ ์ฃผ์˜: restore๋กœ ์ง€์šด ๋‚ด์šฉ์€ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!


๐Ÿค ๋ธŒ๋žœ์น˜ ํ•ฉ์น˜๊ธฐ: merge์˜ ๋งˆ๋ฒ•

์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

# 1. main ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
git checkout main

# 2. feature ๋ธŒ๋žœ์น˜ ๋‚ด์šฉ์„ main์— ๋ณ‘ํ•ฉ
git merge feature-login

# 3. ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ฐ˜์˜
git push origin main

๋ณ‘ํ•ฉ ํ›„ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ

# ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋œ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
git branch -d feature-login

# ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋„ ์‚ญ์ œ
git push origin --delete feature-login

๐Ÿ’ฅ ์ถฉ๋Œ(Conflict) ํ•ด๊ฒฐํ•˜๊ธฐ

๊ฐ€์žฅ ๋ฌด์„œ์›Œํ•˜๋Š” ์ƒํ™ฉ์ด์ง€๋งŒ, ์‚ฌ์‹ค ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์š”!

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

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

์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •

# ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ํŒŒ์ผ ๋‚ด์šฉ
<<<<<<< HEAD (ํ˜„์žฌ ๋ธŒ๋žœ์น˜)
hello world
hello binky
=======
hello world         
hello gary
>>>>>>> feature-branch (๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜)

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1. ์›ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊ธฐ๊ณ  <<<<<<<, =======, >>>>>>> ์‚ญ์ œ
2. ์ˆ˜์ • ์™„๋ฃŒ ํ›„ ์ €์žฅ
3. git add โ†’ git commit โ†’ git push

๐ŸŽจ VSCode์—์„œ ์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ

VSCode๋Š” ์ถฉ๋Œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ UI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • Accept Current Change: ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ๋‚ด์šฉ ์„ ํƒ
  • Accept Incoming Change: ๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜ ๋‚ด์šฉ ์„ ํƒ
  • Accept Both Changes: ๋‘˜ ๋‹ค ์„ ํƒ
  • Compare Changes: ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋น„๊ต

๐Ÿ†˜ ์‹ค์ˆ˜ํ–ˆ์„ ๋•Œ: ๋ธŒ๋žœ์น˜ ๋ณต๊ตฌํ•˜๊ธฐ

"์•„! ๋ธŒ๋žœ์น˜๋ฅผ ์ž˜๋ชป ์‚ญ์ œํ–ˆ๋‹ค!" ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”. Git์€ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„ ๋ณต๊ตฌ ๊ณผ์ •

1๋‹จ๊ณ„: ๋ณต๊ตฌ ์‹œ์  ์ฐพ๊ธฐ

# ๋ชจ๋“  ์ฐธ์กฐ ๋‚ด์—ญ ํ™•์ธ
git reflog

# ๊ฒฐ๊ณผ ์˜ˆ์‹œ:
# a1b2c3d HEAD@{0}: branch: deleted branch feature-login
# e4f5g6h HEAD@{1}: commit: add login function

2๋‹จ๊ณ„: ๋ธŒ๋žœ์น˜ ๋ณต๊ตฌํ•˜๊ธฐ

# ์ปค๋ฐ‹ ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด ๋ธŒ๋žœ์น˜ ๋ณต๊ตฌ
git checkout -b feature-login e4f5g6h

๐ŸŽฏ ์‹ค์ „ ํŒ & ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

๐Ÿ’ก ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜

# ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
feature/user-authentication
feature/payment-system

# ๋ฒ„๊ทธ ์ˆ˜์ •
fix/login-error
fix/memory-leak

# ๊ธด๊ธ‰ ์ˆ˜์ •
hotfix/security-patch

๐Ÿ” ์œ ์šฉํ•œ ๋ช…๋ น์–ด๋“ค

# ๋ชจ๋“  ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ๊ทธ๋ž˜ํ”„๋กœ ๋ณด๊ธฐ
git log --all --decorate --oneline --graph

# ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
git branch -r

# ๋กœ์ปฌ + ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชจ๋‘ ๋ณด๊ธฐ
git branch -a

โšก ์›Œํฌํ”Œ๋กœ์šฐ ์˜ˆ์‹œ

# 1. ์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์‹œ์ž‘
git switch -c feature/new-dashboard

# 2. ์ž‘์—… ์™„๋ฃŒ ํ›„ ์ปค๋ฐ‹
git add .
git commit -m "feat: add new dashboard"

# 3. ์›๊ฒฉ์— ํ‘ธ์‹œ
git push -u origin feature/new-dashboard

# 4. main์œผ๋กœ ๋ณ‘ํ•ฉ
git switch main
git merge feature/new-dashboard

# 5. ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ
git branch -d feature/new-dashboard
git push origin --delete feature/new-dashboard

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ

Branch๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ํ˜‘์—…์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ๋ช‡ ๋ฒˆ ์จ๋ณด๋ฉด ๊ธˆ์„ธ ์ต์ˆ™ํ•ด์ ธ์š”!

ํ•ต์‹ฌ๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”:

  • ๐ŸŒฑ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ธŒ๋žœ์น˜ ๋‚˜๋ˆ„๊ธฐ
  • ๐Ÿ”„ ์ž‘์—… ์™„๋ฃŒ ํ›„ mergeํ•˜๊ธฐ
  • ๐Ÿงน ์‚ฌ์šฉ ์™„๋ฃŒ๋œ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌํ•˜๊ธฐ
  • ๐Ÿ’ฅ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•˜๊ธฐ

์˜ค๋Š˜๋ถ€ํ„ฐ Branch๋ฅผ ์ ๊ทน ํ™œ์šฉํ•ด์„œ ๊น”๋”ํ•œ Git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๐Ÿš€


์ด ๊ธ€์ด ๋„์›€๋˜์…จ๋‹ค๋ฉด ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ๋„ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”! ๐Ÿ’

0๊ฐœ์˜ ๋Œ“๊ธ€