μ΄ κΈμ "Gitμ λ€μ΄λ λ΄€λλ°, λ§μ μ°λ €λ λ§λ§ν" λΆλ€μ μν μ΅μνμ κ°μ΄λμ λλ€. 볡μ‘ν μ리보λ€λ λΉμ₯ κ³Όμ μ νλ‘μ νΈμ μ¨λ¨Ήμ μ μλ μ€μ μμΆ μ§μλΆν° μμν΄ μ μ°¨ λ²μλ₯Ό νμ₯ν΄ λκ°λλ€.
[μ΄ κΈμ κ°μ ]
- Window μ΄μ체μ μ¬μ©
- GitHub κ³μ μ‘΄μ¬ (μλ€λ©΄ GitHub νμκ°μ νμ΄μ§μμ λ¨Όμ κ°μ ν΄ μ£ΌμΈμ!)
1λ¨κ³. Gitμ 4κ°μ§ κ³΅κ° μ΄ν΄νκΈ° (κ°μ₯ μ€μ βοΈ)
μ½λλ₯Ό μμ νκ³ GitHubμ μ¬λ¦¬κΈ°κΉμ§, νμΌμ λ€μ 4κ°μ 곡κ°μ μμλλ‘ κ±°μΉκ² λ©λλ€. μ΄ νλ¦λ§ μ΄ν΄ν΄λ Gitμ μ λ°μ μμ κ²λλ€.
[Working Directory] β (git add)
β [Staging Area] β (git commit)
β [Local Repository] β (git push)
β [Remote Repository]
| μν | μ€λͺ |
|---|---|
| Working Directory | νμ¬ λ΄ μ»΄ν¨ν°μμ νμΌμ μμ νλ 곡κ°. μμ§ Gitμ΄ μΆμ νμ§ μλ λ³κ²½μ¬ν |
| Staging Area |
git addλ‘ μ¬λ¦° λ³κ²½μ¬νμ΄ λκΈ°νλ 곡κ°. 컀λ°ν λ΄μ©μ μ λ³νλ λ¨κ³ |
| Local Repository |
git commitμΌλ‘ λ³κ²½ μ΄λ ₯μ΄ μ μ₯λ λ΄ μ»΄ν¨ν°μ μ μ₯μ |
| Remote Repository | GitHub λ± μ격 μλ²μ μλ μ μ₯μ. git pushλ‘ λ‘컬 λ³κ²½μ¬νμ μ
λ‘λ |
2λ¨κ³. μ΅μ΄ 1ν μΈν (μ»΄ν¨ν° μ¬μ μ²μ ν λ²λ§)
1. ν°λ―Έλ λ° Git μ€μΉ
κ°λ°μ νλ €λ©΄ 리λ
μ€ νκ²½μ μ΅μν΄μ§λ κ²μ΄ μ 리νλ―λ‘, Windows νκ²½μμλ WSL(Windows Subsystem for Linux) μ¬μ©μ κΆμ₯ν©λλ€.
# 1. Windows PowerShellμ κ΄λ¦¬μ κΆνμΌλ‘ μ€ν ν WSL μ€μΉ λͺ
λ Ήμ΄ μ
λ ₯
wsl --install
# 2. μ€μΉ μλ£ ν μ»΄ν¨ν° μ¬λΆν
# 3. μ€μΉλ Ubuntu(WSL) ν°λ―Έλμ μ€νν λ€ ν λλ ν λ¦¬λ‘ μ΄λ
cd ~
# 4. ν¨ν€μ§ λͺ©λ‘ μ
λ°μ΄νΈ λ° Git μ€μΉ
sudo apt-get update
sudo apt-get install git
# 5. μ€μΉ μλ£ ν λ²μ νμΈ
git --version
2. μ¬μ©μ μ 보 λ±λ‘
μ»€λ° λ΄μμ κΈ°λ‘λ μ΄λ¦κ³Ό μ΄λ©μΌμ μ€μ ν©λλ€.
git config --global user.name "νκΈΈλ"
git config --global user.email "your@email.com"
3λ¨κ³. μλ‘μ΄ νλ‘μ νΈ μμνκΈ°
1. GitHub μ격 μ μ₯μ(Repository) μμ±
- GitHub λ‘κ·ΈμΈ ν μ°μΈ‘ μλ¨μ + λ²νΌμ λλ₯΄κ³ New repositoryλ₯Ό ν΄λ¦ν©λλ€.
-
Repository nameμ νλ‘μ νΈ μ΄λ¦μ μ
λ ₯ν©λλ€. (μ:
programming-assignment) - μ μ₯μ κ³΅κ° λ²μ(Public λλ Private)λ₯Ό μ νν©λλ€.
- νλ¨μ Create repository λ²νΌμ λλ₯΄λ©΄ μ격 μ μ₯μκ° μμ±λ©λλ€.
- μμ±λ νμ΄μ§μμ
HTTPSνμ΄ μ νλ μνλ‘ μ μ₯μ URL μ£Όμλ₯Ό 볡μ¬ν©λλ€. > μ΄λ―Έ λ§λ€μ΄μ§ Repositoryκ° μλ€λ©΄ URL μ£Όμλ§ λ³΅μ¬νλ©΄ λ©λλ€.
2. μ격 μ μ₯μλ₯Ό λ‘μ»¬λ‘ κ°μ Έμ€κΈ° (Clone)
볡μ¬ν URLμ μ¬μ©νμ¬ νλ‘μ νΈλ₯Ό μμ
ν λλ ν λ¦¬λ‘ λ€μ΄λ‘λν©λλ€.
# μνλ λλ ν λ¦¬λ‘ μ΄λ ν μ격 μ μ₯μ 볡μ
cd ~
git clone {볡μ¬ν λ ν¬μ§ν 리 URL}
# λ€μ΄λ‘λλ νλ‘μ νΈ ν΄λ λͺ©λ‘ νμΈ ν μ§μ
ls
cd programming-assignment
4λ¨κ³. λ§€μΌ λ°λ³΅νλ μμ μ¬μ΄ν΄
ν νλ‘μ νΈλ₯Ό μ§νν λ μΆ©λμ μ΅μννκ³ μμ νκ² μ½λλ₯Ό μ¬λ¦¬λ νμ€ νλ¦μ λλ€.
1. μμ μμ μ : μ΅μ μ½λ λ°μ λ° λΈλμΉ μμ±
λ€λ₯Έ νμμ΄ λ³κ²½ν μ¬νμ΄ μμ μ μμΌλ―λ‘ νμ μ΅μ μ½λλ₯Ό λ°μμ¨ μνμμ μλ‘μ΄ λΈλμΉλ₯Ό λ§λ€μ΄ μμ
μ μμν©λλ€.
# λ©μΈ λΈλμΉλ‘ μ΄λνμ¬ μ΅μ μμ€μ½λ λ€μ΄λ‘λ
git checkout main
git pull origin main
# κΈ°λ₯μ κ°λ°ν μλ‘μ΄ λΈλμΉλ₯Ό μμ±νλ©° λμμ μ΄λ (-b μ΅μ
)
git checkout -b feature/login
2. λ³κ²½ μ¬ν νμΈ λ° λ°μ (Status, Add, Commit)
μ½λλ₯Ό μμ ν λ€ λ‘컬 μ μ₯μμ κΈ°λ‘νλ κ³Όμ μ
λλ€.
# 1. νμ¬ νμΌλ€μ μν νμΈ (μμ λκ±°λ μΆκ°λ νμΌ νμΈ κ°λ₯)
git status
# νμΌλͺ
μ΄ λΉ¨κ°μμΌλ‘ νμλλ©΄ Working Directory μν, μ΄λ‘μμ΄λ©΄ Staging Area μνλ₯Ό μλ―Έν©λλ€.
# 2. λ³κ²½λ νμΌμ Staging Areaλ‘ μΆκ°
git add {νΉμ νμΌλͺ
}
git add . # νμ¬ λλ ν 리μ λͺ¨λ λ³κ²½ μ¬νμ ν λ²μ μΆκ°ν λ μ¬μ©
# 3. λ³κ²½ μ΄λ ₯μ λ‘컬 μ μ₯μμ κΈ°λ‘ (μ»€λ° λ©μμ§λ λͺ
ννκ² μμ±)
git commit -m "feat: λ‘κ·ΈμΈ κΈ°λ₯ ꡬν"
3. μ격 μ μ₯μμ μ λ‘λ (Push)
μμ
μ΄ μλ£λ λ‘컬 λΈλμΉμ λ΄μ©μ GitHubμ λ°μν©λλ€.
git push origin feature/login
μ£Όμ: GitHub 보μ μ μ± μ λ°λΌ μΈμ¦ κ°μ΄λκ° λνλλ©΄ ν¨μ€μλ μΉΈμ μΌλ° κ³μ λΉλ°λ²νΈκ° μλ, GitHubμμ λ°κΈλ°μ κ°μΈ ν ν°(Personal Access Token)μ μ λ ₯ν΄μΌ ν©λλ€.
5λ¨κ³. ν·κ°λ¦¬κΈ° μ¬μ΄ νμ κ°λ μ 리
1. Git vs GitHub
- Git: λ΄ μ»΄ν¨ν°(λ‘컬) μμμ νμΌμ λ³κ²½ μ΄λ ₯μ μΆμ νκ³ κ΄λ¦¬νλ ν΅μ¬ νλ‘κ·Έλ¨μ λλ€. μΈν°λ· μ°κ²° μμ΄λ λμν©λλ€.
- GitHub: GitμΌλ‘ κ΄λ¦¬λλ νλ‘μ νΈ νμΌλ€μ μΉμμ μ¬λ € 곡μ νκ³ , λ€λ₯Έ μ¬λκ³Ό νμ ν μ μλλ‘ λλ ν΄λΌμ°λ μλΉμ€μ λλ€.
2. Fork vs Clone
| λͺ λ Ήμ΄ | μ£Όμ μν | μ£Όλ‘ μ¬μ©νλ μν© |
|---|---|---|
| Fork | νμΈμ GitHub μ격 μ μ₯μλ₯Ό λ³ΈμΈμ GitHub μ격 μ μ₯μλ‘ ν΅μ§Έλ‘ 볡μ¬ν©λλ€. | μ€νμμ€ νλ‘μ νΈμ κΈ°μ¬νκ±°λ, μλ³Έ μ μ₯μμ μ§μ κΆνμ΄ μμ λ μ¬μ©ν©λλ€. |
| Clone | GitHub μ격 μ μ₯μμ μλ μ½λλ₯Ό λ΄ μ»΄ν¨ν°(λ‘컬)λ‘ λ€μ΄λ‘λν©λλ€. | λ³ΈμΈ νλ‘μ νΈλ ν νλ‘μ νΈλ₯Ό μμνκΈ° μν΄ λ‘μ»¬λ‘ κ°μ Έμ¬ λ μ¬μ©ν©λλ€. |
3. origin
originμ νμ¬ λ‘컬 μ μ₯μμ μ°κ²°λ κΈ°λ³Έ μ격 μ μ₯μμ λ³μΉ(Alias)μ
λλ€. νλ‘μ νΈ λ³΅μ μ μλμΌλ‘ μ§μ λλ©°, μλ λͺ
λ Ήμ΄λ‘ μ£Όμλ₯Ό νμΈν μ μμ΅λλ€.
git remote -v
6λ¨κ³. μμλλ©΄ μ μ©ν μΆκ° λͺ λ Ήμ΄
κΈ°λ³Έ μ¬μ΄ν΄μ΄ μ΅μν΄μ§ ν νμμ λ°λΌ μ°Ύμ μΈ μ μλ λͺ λ Ήμ΄ λͺ©λ‘μ λλ€.
1. λΈλμΉ κ΄λ¦¬
git branch # λ‘컬 λΈλμΉ λͺ©λ‘ νμΈ
git branch -r # μ격 μ μ₯μ λΈλμΉ λͺ©λ‘ νμΈ
git branch -a # λ‘컬 λ° μ격 μ μ₯μμ λͺ¨λ λΈλμΉ λͺ©λ‘ νμΈ
git branch -d {λΈλμΉλͺ
} # μμ
μ΄ λλ λ‘컬 λΈλμΉ μμ
2. μμ μ μ₯ (Stash)
μμ
λμ€ μ»€λ°νμ§ μμ μνμμ κΈνκ² λ€λ₯Έ λΈλμΉλ‘ μ νν΄μΌ ν λ, νμ¬ λ³κ²½ μ¬νμ μμλ‘ λ³΄κ΄νλ κΈ°λ₯μ
λλ€.
git stash # νμ¬ λ³κ²½ μ¬νμ μλμ μμ μ μ₯
git stash pop # μμ μ μ₯νλ λ΄μμ λ€μ κΊΌλ΄μ νμ¬ μμ
μ μ μ©
3. μ»€λ° μ΄λ ₯ νμΈ
git log # μ 체 μμΈ μ»€λ° μ΄λ ₯ νμΈ
git log --oneline # μ»€λ° ν΄μμ λ©μμ§λ₯Ό ν μ€λ‘ κ°λ΅νκ² νμΈ (κΆμ₯)
4. λ³κ²½ μ¬ν λλ리기 λ° μ·¨μ
# Working Directoryμ λ³κ²½ μ¬νμ μ·¨μνκ³ λ§μ§λ§ μ»€λ° μνλ‘ λλλ¦Ό
git restore {νμΌλͺ
}
# Staging Areaμ μ¬λ¦° νμΌμ λ΄λ €μ 볡μ (git add μ·¨μ)
git restore --staged {νμΌλͺ
}
# λ‘컬 μ μ₯μμ μ΅κ·Ό 컀λ°μ μ·¨μ
git reset --soft HEAD~1 # 컀λ°λ§ μ·¨μνλ©°, μμ
νλ μ½λλ Staging Areaμ λ¨κ²¨λ
git reset --hard HEAD~1 # π¨ μ΅κ·Ό 컀λ°κ³Ό μμ
νλ μ½λκΉμ§ μ λΆ μμ ν μμ νλ―λ‘ μ£Όμ νμ
5. μ»€λ° μ΄λ ₯ μ 리 (Interactive Rebase)
# μ΅κ·Ό μμ±ν Nκ°μ μ»€λ° λͺ©λ‘μ νμΈνκ³ μμ νκ±°λ νλλ‘ ν©μΉ λ μ¬μ©
git rebase -i HEAD~{μ«μ}
μ£Όμ: μ격 μ μ₯μ(GitHub)μ μ΄λ―Έ pushλ 컀λ°μ λν΄μλ resetμ΄λ rebaseλ₯Ό μ¬μ©νλ κ²μ μ§μν΄μΌ ν©λλ€. μ격 μ΄λ ₯μ΄ κΌ¬μ¬ νμ κ° μΆ©λμ μ λ°ν μ μμ΅λλ€.












