
ํผ์์ ์ฝ๋ฉํ ๋๋ ๋ชฐ๋์ง๋ง, ํ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ ๊ฐ์ฅ ๋จผ์ ๋ถ๋ชํ๋ ๋ฒฝ์ด ๋ฐ๋ก Git Branch์ ๋๋ค. "์ ์ด๋ ๊ฒ ๋ณต์กํ์ง?" ํ๋ฉฐ ๋จธ๋ฆฌ๋ฅผ ๊ฐ์๋ ๊ฒฝํ, ๋ค๋ค ์์ผ์์ฃ ?
์ค๋์ Git Branch์ ํต์ฌ ๊ฐ๋ ๋ถํฐ ์ค์ ํ์ฉ๋ฒ๊น์ง, ํ ๋ฒ์ ์ ๋ฆฌํด๋๋ฆด๊ฒ์! ๐ช
์์ํด๋ณด์ธ์. ์น๊ตฌ์ ํจ๊ป ๋ ๊ณ ์ง๋ฅผ ๋ง๋๋๋ฐ, ํ ๋ช ์ 1์ธต์, ๋ค๋ฅธ ํ ๋ช ์ 2์ธต์ ๋์์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด? ๊ฐ์ ๋ฐ๋ก ๋ง๋ ํ ๋์ค์ ํฉ์น๋ ๊ฒ ํจ์ฌ ํจ์จ์ ์ด๊ฒ ์ฃ !
Branch๋ ๋ฐ๋ก ์ด๋ฐ '๋ ๋ฆฝ์ ์ธ ์์ ๊ณต๊ฐ'์ ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
main ๋ธ๋์น โโโโโโโโโโโโโโโ
\
feature ๋ธ๋์น โโโโโโ
| ์ฉ์ด | ์ค๋ช |
|---|---|
| ๋ธ๋์น | ๋ ๋ฆฝ์ ์ธ ์์ ๊ณต๊ฐ (์ฝ๋์ ๋ถ๊ธฐ์ ) |
| ๊ธฐ๋ณธ ๋ธ๋์น | master(Git) ๋๋ main(GitHub) |
| HEAD | ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
# ํ์ฌ ๋ธ๋์น ๋ชฉ๋ก ํ์ธ
git branch
# ๊ฒฐ๊ณผ ์์:
# * main โ ํ์ฌ ๋ธ๋์น (๋ณํ๋ก ํ์)
# feature
# hotfix
# ๋ธ๋์น ์์ฑ
git branch feature-login
# main์์ ํ์๋๋ ๋ธ๋์น ๋ช
์์ ์ผ๋ก ์์ฑ
git branch feature-login main
# ๋ธ๋์น ์ญ์ (-D๋ ๊ฐ์ ์ญ์ )
git branch -D feature-login
๐ก ๊ฟํ: ๋ธ๋์น ์ด๋ฆ์
feature-๋ก๊ทธ์ธ,fix-๋ฒ๊ทธ์์ ์ฒ๋ผ ์์ ๋ด์ฉ์ ๋ช ํํ ํํํ์ธ์!
Git 2.23 ๋ฒ์ ๋ถํฐ checkout์ ๋์ฒดํ ์๋ก์ด ๋ช
๋ น์ด๋ค์ด ๋ฑ์ฅํ์ต๋๋ค!
# ๋ธ๋์น ๋ณ๊ฒฝ
git checkout feature-login
# ๋ธ๋์น ์์ฑ + ๋ณ๊ฒฝ
git checkout -b feature-signup
# ๋ธ๋์น ๋ณ๊ฒฝ
git switch feature-login
# ๋ธ๋์น ์์ฑ + ๋ณ๊ฒฝ
git switch -c feature-signup
์ switch๋ฅผ ์ธ๊น์?
checkout์ ๊ธฐ๋ฅ์ด ๋๋ฌด ๋ง์์ ํท๊ฐ๋ฆผswitch๋ ๋ธ๋์น ๋ณ๊ฒฝ์๋ง ์ง์ค์ฝ๋ฉํ๋ค๊ฐ "์, ์ด๊ฑฐ ์๋๋๋ก ๋๋ฆฌ๊ณ ์ถ๋ค!" ํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ ๋๋ค.
# ๐ ์๋ก์ด ๋ฐฉ์ (์ถ์ฒ)
git restore README.md
# ๊ธฐ์กด ๋ฐฉ์
git checkout -- README.md
# ๐ ์๋ก์ด ๋ฐฉ์ (์ถ์ฒ)
git restore --staged README.md
# ๊ธฐ์กด ๋ฐฉ์
git reset HEAD README.md
โ ๏ธ ์ฃผ์: restore๋ก ์ง์ด ๋ด์ฉ์ ์ปค๋ฐํ์ง ์์๋ค๋ฉด ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํฉ๋๋ค!
์ฌ๋ฌ ๋ธ๋์น์์ ์์ ํ ๋ด์ฉ์ ํ๋๋ก ํฉ์น๋ ๊ณผ์ ์ ๋๋ค.
# 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
๊ฐ์ฅ ๋ฌด์์ํ๋ ์ํฉ์ด์ง๋ง, ์ฌ์ค ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์์!
๋ ๋ธ๋์น๊ฐ ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ๋ค๋ฅด๊ฒ ์์ ํ์ ๋ ๋ฐ์ํฉ๋๋ค.
# ์ถฉ๋ ๋ฐ์ ์ ํ์ผ ๋ด์ฉ
<<<<<<< HEAD (ํ์ฌ ๋ธ๋์น)
hello world
hello binky
=======
hello world
hello gary
>>>>>>> feature-branch (๋ณํฉํ๋ ค๋ ๋ธ๋์น)
ํด๊ฒฐ ๋ฐฉ๋ฒ:
1. ์ํ๋ ์ฝ๋๋ง ๋จ๊ธฐ๊ณ <<<<<<<, =======, >>>>>>> ์ญ์
2. ์์ ์๋ฃ ํ ์ ์ฅ
3. git add โ git commit โ git push
VSCode๋ ์ถฉ๋ ํด๊ฒฐ์ ์ํ ํธ๋ฆฌํ UI๋ฅผ ์ ๊ณตํฉ๋๋ค:
"์! ๋ธ๋์น๋ฅผ ์๋ชป ์ญ์ ํ๋ค!" ๋นํฉํ์ง ๋ง์ธ์. Git์ ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
# ๋ชจ๋ ์ฐธ์กฐ ๋ด์ญ ํ์ธ
git reflog
# ๊ฒฐ๊ณผ ์์:
# a1b2c3d HEAD@{0}: branch: deleted branch feature-login
# e4f5g6h HEAD@{1}: commit: add login function
# ์ปค๋ฐ ํด์๊ฐ์ ์ด์ฉํด ๋ธ๋์น ๋ณต๊ตฌ
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๋ฅผ ๋ง์คํฐํ๋ฉด ํ์ ์ด ํจ์ฌ ์์ํด์ง๋๋ค. ์ฒ์์ ๋ณต์กํด ๋ณด์ด์ง๋ง, ๋ช ๋ฒ ์จ๋ณด๋ฉด ๊ธ์ธ ์ต์ํด์ ธ์!
ํต์ฌ๋ง ๊ธฐ์ตํ์ธ์:
์ค๋๋ถํฐ Branch๋ฅผ ์ ๊ทน ํ์ฉํด์ ๊น๋ํ Git ํ์คํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ณด์ธ์! ๐
์ด ๊ธ์ด ๋์๋์ จ๋ค๋ฉด ๋๋ฃ ๊ฐ๋ฐ์๋ค๊ณผ๋ ๊ณต์ ํด์ฃผ์ธ์! ๐