Git λΈλμΉ
Git λΈλμΉ¶
1. λΈλμΉλ?¶
λΈλμΉλ λ 립μ μΈ μμ 곡κ°μ λλ€. λ©μΈ μ½λμ μν₯μ μ£Όμ§ μκ³ μλ‘μ΄ κΈ°λ₯μ κ°λ°νκ±°λ λ²κ·Έλ₯Ό μμ ν μ μμ΅λλ€.
feature-login
β
βΌ
ββββ(B)βββ(C)
β
(1)βββ(2)βββ(3)βββ(4) main
β
βΌ
ββββ(X)βββ(Y)
β
βΌ
bugfix-header
λΈλμΉλ₯Ό μ¬μ©νλ μ΄μ ¶
- μμ ν μ€ν: λ©μΈ μ½λ μμ μμ΄ μ κΈ°λ₯ ν μ€νΈ
- λ³λ ¬ μμ : μ¬λ¬ κΈ°λ₯μ λμμ κ°λ°
- 체κ³μ κ΄λ¦¬: κΈ°λ₯λ³, λ²κ·Έλ³λ‘ μμ λΆλ¦¬
- νμ μ©μ΄: κ°μ λΈλμΉμμ μμ ν λ³ν©
2. λΈλμΉ κΈ°λ³Έ λͺ λ Ήμ΄¶
λΈλμΉ λͺ©λ‘ νμΈ¶
# λ‘컬 λΈλμΉ λͺ©λ‘
git branch
# μ격 λΈλμΉ ν¬ν¨
git branch -a
# λΈλμΉ μμΈ μ 보
git branch -v
λΈλμΉ μμ±¶
# λΈλμΉ μμ± (μ΄λνμ§ μμ)
git branch λΈλμΉλͺ
# λΈλμΉ μμ± + μ΄λ
git checkout -b λΈλμΉλͺ
# Git 2.23+ κΆμ₯ λ°©λ²
git switch -c λΈλμΉλͺ
λΈλμΉ μ΄λ¶
# κΈ°μ‘΄ λ°©λ²
git checkout λΈλμΉλͺ
# Git 2.23+ κΆμ₯ λ°©λ²
git switch λΈλμΉλͺ
λΈλμΉ μμ ¶
# λ³ν©λ λΈλμΉ μμ
git branch -d λΈλμΉλͺ
# κ°μ μμ (λ³ν© μ λμ΄λ)
git branch -D λΈλμΉλͺ
λΈλμΉ μ΄λ¦ λ³κ²½¶
# νμ¬ λΈλμΉ μ΄λ¦ λ³κ²½
git branch -m μμ΄λ¦
# νΉμ λΈλμΉ μ΄λ¦ λ³κ²½
git branch -m κΈ°μ‘΄μ΄λ¦ μμ΄λ¦
3. λΈλμΉ λ³ν© (Merge)¶
μμ μ΄ μλ£λ λΈλμΉλ₯Ό λ€λ₯Έ λΈλμΉμ ν©μΉ©λλ€.
κΈ°λ³Έ λ³ν©¶
# 1. main λΈλμΉλ‘ μ΄λ
git switch main
# 2. feature λΈλμΉλ₯Ό mainμ λ³ν©
git merge feature-branch
λ³ν©μ μ’ λ₯¶
Fast-forward Merge¶
λΈλμΉκ° λΆκΈ°λ ν mainμ λ³κ²½μ΄ μμ λ:
Before:
main: (1)βββ(2)
ββββ(A)βββ(B) feature
After:
main: (1)βββ(2)βββ(A)βββ(B)
feature (μμ )
git switch main
git merge feature
# Fast-forward λ©μμ§ μΆλ ₯
3-Way Merge¶
μμͺ½ λΈλμΉ λͺ¨λ λ³κ²½μ΄ μμ λ:
Before:
(A)βββ(B) feature
/
main: (1)βββ(2)βββ(3)βββ(4)
After:
(A)βββ(B)
/ \
main: (1)βββ(2)βββ(3)βββ(4)βββ(M) Merge commit
git switch main
git merge feature
# Merge commitμ΄ μμ±λ¨
4. μΆ©λ ν΄κ²° (Conflict Resolution)¶
κ°μ νμΌμ κ°μ λΆλΆμ μμ νμ λ μΆ©λμ΄ λ°μν©λλ€.
μΆ©λ λ°μ μ νμΌ λ΄μ©¶
<<<<<<< HEAD
main λΈλμΉμμ μμ ν λ΄μ©
=======
feature λΈλμΉμμ μμ ν λ΄μ©
>>>>>>> feature-branch
μΆ©λ ν΄κ²° κ³Όμ ¶
# 1. μΆ©λ νμΈ
git status
# μΆλ ₯: both modified: μΆ©λνμΌ.txt
# 2. νμΌμ μ΄μ΄ μΆ©λ ν΄κ²°
# <<<<<<< HEAD λΆν° >>>>>>> κΉμ§ μμ
# 3. ν΄κ²° ν μ€ν
μ΄μ§
git add μΆ©λνμΌ.txt
# 4. λ³ν© μλ£
git commit -m "merge: feature-branch λ³ν©, μΆ©λ ν΄κ²°"
μΆ©λ ν΄κ²° μμ¶
μΆ©λ μ :
<<<<<<< HEAD
console.log("Hello from main");
=======
console.log("Hello from feature");
>>>>>>> feature-branch
μΆ©λ ν΄κ²° ν:
console.log("Hello from main");
console.log("Hello from feature");
λ³ν© μ·¨μ¶
# μΆ©λ μ€ λ³ν© μ·¨μ
git merge --abort
5. λΈλμΉ μ λ΅¶
Git Flow¶
main ββββββββββββββββββββββββββββββββββββββββββΆ λ°°ν¬μ©
β
ββ develop ββββββββββββββββββββββββββββββββββΆ κ°λ°μ©
β
ββ feature/login βββββββββββββββββββββββΆ κΈ°λ₯ κ°λ°
β
ββ feature/signup ββββββββββββββββββββββΆ κΈ°λ₯ κ°λ°
β
ββ release/1.0 βββββββββββββββββββββββββΆ λ°°ν¬ μ€λΉ
λΈλμΉ λ€μ΄λ° κ·μΉ¶
| μ λμ¬ | μ©λ | μμ |
|---|---|---|
feature/ |
μ κΈ°λ₯ κ°λ° | feature/login |
bugfix/ |
λ²κ·Έ μμ | bugfix/header-crash |
hotfix/ |
κΈ΄κΈ μμ | hotfix/security-patch |
release/ |
λ°°ν¬ μ€λΉ | release/1.0.0 |
μ€μ΅ μμ : λΈλμΉ μμ μ 체 ν릶
# 1. νλ‘μ νΈ μ€λΉ
mkdir branch-practice
cd branch-practice
git init
echo "# Main Project" > README.md
git add .
git commit -m "initial commit"
# 2. feature λΈλμΉ μμ± λ° μ΄λ
git switch -c feature/greeting
# 3. featureμμ μμ
echo "function greet() { console.log('Hello!'); }" > greet.js
git add .
git commit -m "feat: greeting ν¨μ μΆκ°"
echo "function bye() { console.log('Goodbye!'); }" >> greet.js
git add .
git commit -m "feat: bye ν¨μ μΆκ°"
# 4. λΈλμΉ μν νμΈ
git log --oneline --all --graph
# 5. mainμΌλ‘ μ΄λ ν λ³ν©
git switch main
git merge feature/greeting -m "merge: greeting κΈ°λ₯ λ³ν©"
# 6. λ³ν© μλ£ ν λΈλμΉ μμ
git branch -d feature/greeting
# 7. μ΅μ’
μ΄λ ₯ νμΈ
git log --oneline --graph
μΆ©λ μ€μ΅¶
# 1. λΈλμΉ μμ±
git switch -c feature/update
# 2. featureμμ README μμ
echo "Updated by feature" >> README.md
git add .
git commit -m "feat: README μ
λ°μ΄νΈ"
# 3. mainμΌλ‘ λμκ°μ κ°μ νμΌ μμ
git switch main
echo "Updated by main" >> README.md
git add .
git commit -m "docs: README μ
λ°μ΄νΈ"
# 4. λ³ν© μλ - μΆ©λ λ°μ!
git merge feature/update
# CONFLICT λ©μμ§ μΆλ ₯
# 5. νμΌμ μ΄μ΄ μΆ©λ ν΄κ²° ν
git add README.md
git commit -m "merge: feature/update λ³ν©, μΆ©λ ν΄κ²°"
λͺ λ Ήμ΄ μμ½¶
| λͺ λ Ήμ΄ | μ€λͺ |
|---|---|
git branch |
λΈλμΉ λͺ©λ‘ |
git branch μ΄λ¦ |
λΈλμΉ μμ± |
git switch μ΄λ¦ |
λΈλμΉ μ΄λ |
git switch -c μ΄λ¦ |
μμ± + μ΄λ |
git branch -d μ΄λ¦ |
λΈλμΉ μμ |
git merge λΈλμΉ |
λΈλμΉ λ³ν© |
git merge --abort |
λ³ν© μ·¨μ |
git log --oneline --graph --all |
λΈλμΉ κ·Έλν |
λ€μ λ¨κ³¶
04_GitHub_Getting_Started.mdμμ μ격 μ μ₯μμ νμ λ°©λ²μ λ°°μλ΄ μλ€!