ํ์ต ๋ชฉํ
- Git์ ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํ ์ ์๋ค
- ๋ก์ปฌ(Local)๊ณผ ์๊ฒฉ(Remote) ๊ฐ๋ ์ ์ค๋ช ํ ์ ์๋ค
- ์ปค๋ฐ(Commit), ์คํ ์ด์ง(Stage), ๋ธ๋์น(Branch) ๋ฑ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ค
- ๋ก์ปฌ ์ปดํจํฐ์์ Git ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๊ฐ์ด๋ ์์ด ์ฌ์ฉํ ์ ์๋ค
Git์ ํ์์ฑ๊ณผ ์ญ์ฌ
Git์ด๋?
- ์ ์: ์์ค ์ฝ๋๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๋๊ตฌ
- ํต์ฌ ๊ธฐ๋ฅ:
- ํ์ผ์ ์ํ ์ ์ฅ
- ํ์ผ์ ๋ณ๊ฒฝ ๊ธฐ๋ก ์ ์ฅ (ํต์ฌ!)
- ๋ถ๋ฅ: ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (Distributed VCS)
๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๋ฐ์

1์ธ๋: ๋ก์ปฌ VCS
- ๊ฐ๋ฐ์ ์ปดํจํฐ์์๋ง ๊ด๋ฆฌ
- ํ์ ๋ถ๊ฐ๋ฅ
2์ธ๋: ์ค์์ง์ค์ VCS (Centralized VCS)
- ์๋ฒ 1๋์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ค์น
- ํ์๋ค์ด ๊ณต๋์ผ๋ก ์ ์ํ์ฌ ์ฌ์ฉ
๋ฌธ์ ์ :
- SPOF (Single Point of Failure): ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ์ ์ฒด ์์ ์ค๋จ
- ์๋ฒ๊ฐ ๋ณ๋ชฉ ์ง์ ์ด ๋จ

3์ธ๋: ๋ถ์ฐ VCS
์์: Git
- ์ฝ๋ ์ ์ฅ์๋ฅผ ๋ณต์ (Clone) ๊ฐ๋ฅ
- ๊ฐ ๋ก์ปฌ ํ๊ฒฝ์ด ์์ ํ ์ ์ฅ์ ์ญํ
- ์ค์ ์๋ฒ๊ฐ ๋ค์ด๋์ด๋ ์์ ๊ฐ๋ฅ
- ๋ก์ปฌ์์ ๋ณต๊ตฌ ๊ฐ๋ฅ
๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ์ฅํด์ผ ํ๋ ์ด์
์ค์ ์ฌ๋ก :
- ์ปค๋ฐ ์: ์ฝ 19,000๊ฐ
- ๊ฐ ํ์ผ๋ณ๋ก ๋ณ๊ฒฝ ์ด์ , ์์ , ์์ฑ์ ์ถ์ ๊ฐ๋ฅ
- ํน์ ์ฝ๋ ๋ผ์ธ ์ ํ โ ์ธ์ , ์ ์ถ๊ฐ๋์๋์ง ํ์ธ ๊ฐ๋ฅ
- PR(Pull Request) ๋งํฌ๋ฅผ ํตํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ด์ญ ํ์ธ
์ฅ์ :
- ์ด๋ ฅ ํ์ : 4๋ ์ , 2๋ ์ ์ฝ๋ ๋ณ๊ฒฝ ๋ด์ญ ํ์ธ
- ์์ฑ์ ํ์ธ: ๋๊ฐ ๋ง๋ค์๋์ง ์ถ์
- ๋ณ๊ฒฝ ๋ชฉ์ ์ดํด: ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ํตํ ๋งฅ๋ฝ ํ์
- ๋ ๋ฆฝ์ ํ์ต: ๋ค๋ฅธ ์ฌ๋ ๋์ ์์ด๋ ์ฝ๋ ์ดํด ๊ฐ๋ฅ
AI ์๋์ Git ํ์ต์ ์๋ฏธ
LLM (Large Language Model)์ด๋?
- ์ ์: ๋ํ ์ธ์ด ๋ชจ๋ธ
- ๋์ ์๋ฆฌ:
- ์ฌ๋๋ค์ด ๋ง๋ ๋ฐ์ดํฐ๋ก ํ์ต
- ๋ค์ ๋จ์ด๋ฅผ ์์ธกํ๋๋ก ํ๋ จ๋จ
- ๋ถํฌ์ ํจํด์ ํ์ตํ์ฌ ๊ทธ๋ด์ธํ ๋ต๋ณ ์์ฑ
Git ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฆฌ๋ ์ค ๊ธฐ๋ณธ ๋ช ๋ น์ด
| ๋ช ๋ น์ด | ์ค๋ช | ์์ |
| pwd | Print Working Directory (ํ์ฌ ๊ฒฝ๋ก ์ถ๋ ฅ) | pwd |
| cd | Change Directory (๋๋ ํ ๋ฆฌ ์ด๋) | cd basic |
| cd.. | ์์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ | cd.. |
| ls | List (ํ์ผ/ํด๋ ๋ชฉ๋ก ์ถ๋ ฅ) | ls |
| ls -al | ์จ๊น ํ์ผ ํฌํจ ์์ธ ๋ชฉ๋ก | ls -al |
| mkdir | Make Directory (ํด๋ ์์ฑ) | mkdir basic |
| clear | ์ฝ์ ํ๋ฉด ์ง์ฐ๊ธฐ | clear |
| man | Manual (๋ช ๋ น์ด ๋งค๋ด์ผ) | man is |
| touch | ๋น ํ์ผ ์์ฑ | touch file.txt |
์ต์
์ฌ์ฉ๋ฒ:
- ๋จ์ถ ์ต์ : - (์: -a, -l)
- ํ ์ต์ : -- (์: --all, --list)
Git ์ด๊ธฐ ์ค์
์ฌ์ฉ์ ์ ๋ณด ์ค์ (ํ์!)
git config --global user.name "your-name"
git config --global user.email "your-email@example.com"- ์ปค๋ฐ ์์ฑ์ ์ ๋ณด๋ก ์ฌ์ฉ๋จ
- ์ค์ ํ์ง ์์ผ๋ฉด ์ปค๋ฐ ์ ์ค๋ฅ ๋ฐ์
์ค๋ฐ๊ฟ ์ค์
git config --global core.autocrlf true์๋ํฐ ์ค์
# Vim ์ฌ์ฉ
git config --global core.editor vim
# VS Code ์ฌ์ฉ (์ถ์ฒ)
git config --global core.editor "code --wait"
์ค์ ํ์ธ
# ๋ก์ปฌ ์ ์ฅ์ ์ค์ ํ์ธ
git config -l
# ๊ธ๋ก๋ฒ ์ค์ ํ์ธ
git config --global -l
# ์๋ํฐ๋ก ํ์ธ/์์
git config -e
git config --global -e
Git ํต์ฌ ๊ฐ๋
๋ ํฌ์งํ ๋ฆฌ (Repository)
์ ์: ์ ์ฅ์ = ์ฝ๋ ์ ์ฅ์
๋จ์: ํ๋ก์ ํธ ๋จ์๋ก ์์ฑ
- 1 ํ๋ก์ ํธ = 1 ๋ ํฌ์งํ ๋ฆฌ
- ์: Apache Kafka ํ๋ก์ ํธ = 1๊ฐ์ ๋ ํฌ์งํ ๋ฆฌ
๋ก์ปฌ ๋ ํฌ์งํ ๋ฆฌ: ๋ด ์ปดํจํฐ์ ํ๋ก์ ํธ ํด๋
์๊ฒฉ ๋ ํฌ์งํ ๋ฆฌ: GitHub ๋ฑ์ ์๋ฒ์ ์๋ ์ ์ฅ์
์์ฑ ๋ฐฉ๋ฒ:
- ์๋ก ์์ฑ: git init
- ๋ณต์ : git clone <url>
์ปค๋ฐ (Commit)
์ ์:
- Commitment = ์ฝ์, ๋์ฅ ์ฐ๊ธฐ
- ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ์ฅํ๋ ๋จ์
- ์ฝ๋์ ์ค๋ ์ท
ํน์ง:
- ๊ฐ ์ปค๋ฐ์ ๊ณ ์ ํ ํด์๊ฐ(ID)์ ๊ฐ์ง
- ๊ณผ๊ฑฐ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ Pointer ๊ตฌ์กฐ
- Linked List์ฒ๋ผ ์ฐ๊ฒฐ๋จ
- ์ต์ ์ปค๋ฐ โ ๊ณผ๊ฑฐ ์ปค๋ฐ ๋ฐฉํฅ
Git์ ํ์ผ ๊ด๋ฆฌ ๋ฐฉ์
Snapshot ๋ฐฉ์

๋ฒ์ 1: Aโ, Bโ, Cโ
๋ฒ์ 2: Aโ, Bโ, Cโ (B๋ ๋ณ๊ฒฝ ์์ด์ ํฌ์ธํฐ๋ง)
๋ฒ์ 3: Aโ, Bโ, Cโ
๋ฒ์ 4: Aโ, Bโ, Cโ
๋ฒ์ 5: Aโ, Bโ, Cโ- ์ ์ฒด ํ์ผ์ ์ต์ข ์ํ๋ฅผ ๋ฒ์ ๋ณ๋ก ์ ์ฅ
- ๋ณ๊ฒฝ๋์ง ์์ ํ์ผ์ ์ด์ ๋ฒ์ ํฌ์ธํฐ ์ฌ์ฉ
- ์ด๋ค ๋ฒ์ ์ ์ ํํด๋ ์ฆ์ ํด๋น ์์ ์ ์ ์ฒด ์ํ ํ์ธ ๊ฐ๋ฅ
์ฅ์ :
- ํน์ ์์ ์ผ๋ก ๋น ๋ฅธ ๋ณต๊ตฌ
- ๋ธ๋์น ์์ฑ/์ ํ์ด ๋น ๋ฆ
- ๋ณ๋ ฌ ์์ ์ ์ ๋ฆฌ
์ค์ต: ๋ก์ปฌ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
์ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
# 1. ์์
ํด๋ ์์ฑ ๋ฐ ์ด๋
mkdir basic
cd basic
# 2. ํ์ฌ ๊ฒฝ๋ก ํ์ธ
pwd
# 3. Git ์ ์ฅ์๋ก ์ด๊ธฐํ
git init
# ๊ฒฐ๊ณผ: Initialized empty Git repository in /path/to/basic/.git/
# 4. ์์ฑ๋ .git ํด๋ ํ์ธ
ls -al
# .git ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋จ
# 5. .git ๋ด๋ถ ํ์ธ
cd .git
ls -al
์ค์ต: ์๊ฒฉ ๋ ํฌ์งํ ๋ฆฌ ๋ณต์

Clone ์ค์ต
# 1. ์์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
cd ..
# 2. ์ ํด๋ ์์ฑ
mkdir remote-test
cd remote-test
# 3. Apache Kafka ๋ ํฌ์งํ ๋ฆฌ ๋ณต์
git clone https://github.com/apache/kafka.git
# 4. ๋ณต์ ๋ ํด๋๋ก ์ด๋
cd kafka
# 5. .git ๋๋ ํ ๋ฆฌ ํ์ธ
ls -al
# .git์ด ์กด์ฌํจ = ๋ก์ปฌ ๋ ํฌ์งํ ๋ฆฌ
# 6. Git ๋ก๊ทธ ํ์ธ
git log
# 7. ํ ์ค๋ก ๋ก๊ทธ ๋ณด๊ธฐ
git log --oneline
๋งํฌ๋ค์ด(Markdown) ๋ฌธ๋ฒ
๊ธฐ๋ณธ ๋ฌธ๋ฒ
# ์ ๋ชฉ 1 (๊ฐ์ฅ ํฐ ์ ๋ชฉ)
## ์ ๋ชฉ 2
### ์ ๋ชฉ 3
**๊ตต์ ๊ธ์จ**
*๊ธฐ์ธ์*
- ๋ฆฌ์คํธ ํญ๋ชฉ 1
- ๋ฆฌ์คํธ ํญ๋ชฉ 2
1. ๋ฒํธ ๋ฆฌ์คํธ 1
2. ๋ฒํธ ๋ฆฌ์คํธ 2
[๋งํฌ ํ
์คํธ](URL)

Git์ ์ธ ๊ฐ์ง ์์ ๊ณต๊ฐ
Working Directory (์์ ๋๋ ํ ๋ฆฌ)
์ ์: ์ค์ ๋ก ํ์ผ ์์
์ด ์ผ์ด๋๋ ๋ก์ปฌ ๊ณต๊ฐ
ํน์ง:
- IDE์์ ๋ณด์ด๋ ํ์ฌ ์ํ๊ฐ Working Directory์ ์ํ
- ์ค์ ํ์ผ์ ๋ณ๊ฒฝ(์์ฑ, ์์ , ์ญ์ )์ด ์ผ์ด๋๋ ๊ณณ
- pwd ๋ช ๋ น์ด๋ก ํ์ฌ ๊ฒฝ๋ก ํ์ธ ๊ฐ๋ฅ
Staging Area (์คํ ์ด์ง ์์ญ) / Index
์ ์: ์ปค๋ฐ๋๊ธฐ ์ ๋ณ๊ฒฝ์ฌํญ์ ์์๋ก ๋ฆฌ์คํ
ํด ๋ ๊ณต๊ฐ
ํน์ง:
- ๋์ ๋ณด์ด์ง ์๋ ๋ ผ๋ฆฌ์ ๊ณต๊ฐ
- Working Directory์ Local Repository ์ฌ์ด์ ์์น
- ์ปค๋ฐํ ๋ณ๊ฒฝ์ฌํญ์ ์ ํ์ ์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ณต๊ฐ
๋ชฉ์ : ๋
ผ๋ฆฌ์ ๋จ์๋ก ๋ณ๊ฒฝ์ฌํญ์ ๋ฌถ์ด ์ปค๋ฐ ๊ตฌ์ฑ
Local Repository (๋ก์ปฌ ์ ์ฅ์)
์ ์: .git ํด๋ ๋ด์ ์ค์ ์ปค๋ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
ํน์ง:
- ์ปค๋ฐ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ด ์ ์ฅ๋จ
- ํ์ผ ๋จ์๋ก diff๊ฐ ์ ์ฅ
- ๊ฐ์ฒด(objects)๋ก ๋ณ๊ฒฝ์ฌํญ ๊ด๋ฆฌ
๊ธฐ๋ณธ ํ์ผ ์กฐ์ ๋ช ๋ น์ด
ํ์ผ ์์ฑ ๋ฐ ํ์ธ
touch README.md # ๋น ํ์ผ ์์ฑ
ls -a # ํ์ผ ๋ชฉ๋ก ํ์ธ (์จ๊น ํ์ผ ํฌํจ)
cat README.md # ํ์ผ ๋ด์ฉ ์ถ๋ ฅ
vi README.md # VIM ์๋ํฐ๋ก ํ์ผ ํธ์ง
ํ์ผ ๋ด์ฉ ์
๋ ฅ
echo "๋ด์ฉ" # ์ฝ์์ ๋ฌธ์์ด ์ถ๋ ฅ
echo "๋ด์ฉ" > file.md # ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ (๊บพ์ 1๊ฐ)
echo "๋ด์ฉ" >> file.md # ํ์ผ ๋์ ์ถ๊ฐ (๊บพ์ 2๊ฐ)
Git ๊ธฐ๋ณธ ๋ช ๋ น์ด
์ ์ฅ์ ์ด๊ธฐํ ๋ฐ ์ํ ํ์ธ
git init # ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ Git ์ ์ฅ์๋ก ์ด๊ธฐํ
git status # ๋ณ๊ฒฝ์ฌํญ ์ํ ํ์ธgit status ์ถ๋ ฅ ๋ด์ฉ:
- Working Directory์ ์ํ
- Staging Area์ ์ํ
- ์ถ์ ๋์ง ์๋ ํ์ผ(Untracked files)
- ๊ดํธ ์์ ๋ค์ ์ํํ ๋ช ๋ น์ด ํํธ ์ ๊ณต
๋ณ๊ฒฝ์ฌํญ ์ถ๊ฐ ๋ฐ ์ปค๋ฐ
git add <filename> # ํน์ ํ์ผ์ Staging Area์ ์ถ๊ฐ
git add . # ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ Staging Area์ ์ถ๊ฐ
git commit # VIM ์๋ํฐ๋ก ์ปค๋ฐ (๋ฉ์์ง ์์ฑ์ฐฝ ์ด๋ฆผ)
git commit -m "๋ฉ์์ง" # ํ ์ค ๋ฉ์์ง๋ก ๋ฐ๋ก ์ปค๋ฐ
VIM ์๋ํฐ ์ฌ์ฉ๋ฒ:
- i: ์ ๋ ฅ ๋ชจ๋ ์ง์
- ESC: ๋ช ๋ น ๋ชจ๋๋ก ์ ํ
- :w: ์ ์ฅ
- :q: ์ข ๋ฃ
- :wq: ์ ์ฅ ํ ์ข ๋ฃ
์ปค๋ฐ ์ด๋ ฅ ์กฐํ
git log # ๊ธฐ๋ณธ ๋ก๊ทธ ์กฐํ
git log --oneline # ํ ์ค๋ก ๊ฐ๋จํ ์กฐํ
git log --patch # diff์ ํจ๊ป ์กฐํ
git log --stat # ๋ณ๊ฒฝ ํต๊ณ์ ํจ๊ป ์กฐํ
git log --oneline --patch --stat # ์ฌ๋ฌ ์ต์
์กฐํฉ ๊ฐ๋ฅ๋ก๊ทธ ์ถ๋ ฅ ์ ๋ณด:
- Commit ID (ํด์๊ฐ)
- ์์ฑ์ ์ ๋ณด
- ์์ฑ ์๊ฐ
- ์ปค๋ฐ ๋ฉ์์ง (์ ๋ชฉ + ๋ด์ฉ)
- Root commit: ์ต์ด ์ปค๋ฐ ํ์
๋ณ๊ฒฝ์ฌํญ ํ์ธ (diff)
git diff # Working Directory์ ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git diff --staged # Staging Area์ ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git diff --cached # --staged์ ๋์ผdiff ํ์ฉ:
- add ์ : git diff๋ก ๋ณ๊ฒฝ์ฌํญ ํ์ธ ๊ฐ๋ฅ
- add ํ: git diff --staged๋ก ํ์ธํด์ผ ํจ
- ๋ณ๊ฒฝ๋ ์ค ์์ + ํ์
์๊ฒฉ ์ ์ฅ์ ์ฐ๋
์๊ฒฉ ์ ์ฅ์ ์ถ๊ฐ
git remote add origin <URL> # ์๊ฒฉ ์ ์ฅ์๋ฅผ origin์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ถ๊ฐ
git remote -v # ๋ฑ๋ก๋ ์๊ฒฉ ์ ์ฅ์ ํ์ธ์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ:
- origin: ๊ด๋ก์ ์ฃผ ์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ
- fetch: ๊ฐ์ ธ์ค๊ธฐ์ฉ URL
- push: ์ ๋ก๋์ฉ URL
๋ธ๋์น ์ค์ ๋ฐ ํธ์
git branch -M main # ๊ธฐ๋ณธ ๋ธ๋์น ์ด๋ฆ์ main์ผ๋ก ๋ณ๊ฒฝ
git push origin main # ๋ก์ปฌ ๋ณ๊ฒฝ์ฌํญ์ ์๊ฒฉ์ผ๋ก ํธ์
git push -u origin main # upstream ์ค์ ๊ณผ ํจ๊ป ํธ์
์๊ฒฉ ์ ์ฅ์ ๋ณต์
git clone <URL> # ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ก์ปฌ๋ก ๋ณต์
๋ก์ปฌ ์ ์ฅ์ ์์ฑ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ 1: git init (๋ก์ปฌ ์ฐ์ )
ํ๋ก์ธ์ค:
- ๋ก์ปฌ ๋๋ ํ ๋ฆฌ ์์ฑ: mkdir project
- ๋๋ ํ ๋ฆฌ ์ด๋: cd project
- Git ์ด๊ธฐํ: git init
- ํ์ผ ์์ ๋ฐ ์ปค๋ฐ
- GitHub์ ์๊ฒฉ ์ ์ฅ์ ์์ฑ (๋น ์ ์ฅ์, ์ฒดํฌ๋ฐ์ค ๋ชจ๋ ํด์ )
- ์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐ: git remote add origin <URL>
- ํธ์: git push -u origin main
์ฃผ์์ฌํญ: GitHub์์ ์ ์ฅ์ ์์ฑ ์ README, .gitignore, license ์ถ๊ฐ ์ต์
๋ชจ๋ ์ฒดํฌ ํด์
๋ฐฉ๋ฒ 2: git clone (์๊ฒฉ ์ฐ์ ) - ๊ถ์ฅ
ํ๋ก์ธ์ค:
- GitHub์์ ์๊ฒฉ ์ ์ฅ์ ์์ฑ
- README, .gitignore ๋ฑ ์ ํ์ ์ถ๊ฐ
- ๋ก์ปฌ๋ก ๋ณต์ : git clone <URL>
- ์๋์ผ๋ก .git ํด๋ ๋ฐ ์๊ฒฉ ์ฐ๊ฒฐ ์ค์ ๋จ
์ฅ์ :
- ์ด๊ธฐ ์ค์ ์ด ์๋์ผ๋ก ์๋ฃ
- ์๊ฒฉ ์ฐ๊ฒฐ ์๋ ์ค์ ๋ถํ์
GitHub ์ ์ฅ์ ์์ฑ ์ต์
๊ธฐ๋ณธ ์ค์
- Repository name: ์ ์ฅ์ ์ด๋ฆ (๋ก์ปฌ ์ด๋ฆ๊ณผ ๋์ผํ์ง ์์๋ ๋จ)
- Public/Private: ๊ณต๊ฐ ์ฌ๋ถ ์ ํ
์ด๊ธฐ ํ์ผ ์ต์
- README.md: ํ๋ก์ ํธ ์ค๋ช ํ์ผ
- .gitignore: Git ์ถ์ ์ ์ธ ํ์ผ ๋ฆฌ์คํธ
- ์ธ์ด๋ณ ํ ํ๋ฆฟ ์ ๊ณต (Java, Python, Node ๋ฑ)
- ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ ์ธ์ด ์ ํ
- License: ์คํ์์ค ๋ผ์ด์ ์ค (ํ์ต์ฉ์ ๋ถํ์)
๋น ์ ์ฅ์ ์์ฑ ์:
- ๋ชจ๋ ์ฒดํฌ๋ฐ์ค ํด์ โ ์๋ด ๋ช ๋ น์ด ์ ๊ณต
- ์ฒดํฌ๋ฐ์ค ์ ํ โ ์ด๊ธฐ ์ปค๋ฐ ์๋ ์์ฑ
Commit ๋ฉ์์ง ์์ฑ ๊ฐ์ด๋
์ค์์ฑ
- ์ปค๋ฎค๋์ผ์ด์ ๋๊ตฌ: ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๋ฅ๋ ฅ
- ๋ฏธ๋์ ๋๋ฅผ ์ํ ์ค๋ช ์: ๋์ค์ ์ฝ์ด๋ ์ดํด ๊ฐ๋ฅํด์ผ ํจ
- ํ์ ์ ํต์ฌ: ๋ค๋ฅธ ์ฌ๋์ด ์ฝ์ด๋ ๋ณ๊ฒฝ์ฌํญ ํ์ ๊ฐ๋ฅํด์ผ ํจ

์์ฑ ์์น
- ๋ช ํํ๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑ
- ๋ณ๊ฒฝ ๋ชฉ์ ๊ณผ ๋ด์ฉ์ ๋ชจ๋ ํฌํจ
- ํ๋ก์ ํธ๋ณ ์์ฑ ๊ท์น(Convention) ์ค์
- ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ ๊ตฌ๋ถ (์์ธ ์ค๋ช ํ์ ์)
๊ตฌ์กฐ
์ ๋ชฉ: ๋ณ๊ฒฝ์ฌํญ ์์ฝ (50์ ์ด๋ด)
๋ณธ๋ฌธ: ์์ธ ์ค๋ช
(์ ํ์ฌํญ)
- ์ ์ด ๋ณ๊ฒฝ์ด ํ์ํ๊ฐ?
- ๋ฌด์์ ๋ณ๊ฒฝํ๋๊ฐ?
- ์ด๋ค ์ํฅ์ด ์๋๊ฐ?Git ๋ช ๋ น์ด ์นดํ ๊ณ ๋ฆฌ
์์ํ๊ธฐ
- git clone: ์๊ฒฉ ์ ์ฅ์ ๋ณต์
- git init: ๋ก์ปฌ ์ ์ฅ์ ์ด๊ธฐํ
๋ณ๊ฒฝ์ฌํญ ์กฐ์
- git add: Staging Area์ ์ถ๊ฐ
- git mv: ํ์ผ ์ด๋
- git restore: ๋ณ๊ฒฝ์ฌํญ ๋๋๋ฆฌ๊ธฐ
- git rm: ํ์ผ ์ญ์
์ด๋ ฅ ๊ด๋ฆฌ
- git log: ์ปค๋ฐ ์ด๋ ฅ ์กฐํ
- git status: ํ์ฌ ์ํ ํ์ธ
- git diff: ๋ณ๊ฒฝ์ฌํญ ๋น๊ต
๋ธ๋์น & ๋ณํฉ
- git branch: ๋ธ๋์น ๊ด๋ฆฌ
- git commit: ์ปค๋ฐ ์์ฑ
- git merge: ๋ธ๋์น ๋ณํฉ
- git rebase: ์ปค๋ฐ ์ฌ์ ๋ ฌ
ํ์
- git fetch: ์๊ฒฉ ๋ณ๊ฒฝ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
- git pull: ๊ฐ์ ธ์ค๊ธฐ + ๋ณํฉ
- git push: ๋ก์ปฌ ๋ณ๊ฒฝ์ฌํญ ์ ๋ก๋
์ค์ต ์ํฌํ๋ก์ฐ ์์
์ ํ๋ก์ ํธ ์์
# 1. ๋๋ ํ ๋ฆฌ ์์ฑ ๋ฐ ์ด๋
mkdir git-basic
cd git-basic
# 2. Git ์ด๊ธฐํ
git init
# 3. ํ์ผ ์์ฑ
echo "# My Project" > README.md
# 4. ์ํ ํ์ธ
git status
# 5. Staging Area์ ์ถ๊ฐ
git add README.md
# 6. ๋ค์ ์ํ ํ์ธ
git status
# 7. ์ปค๋ฐ
git commit -m "docs: README ํ์ผ ์ถ๊ฐ"
# 8. ๋ก๊ทธ ํ์ธ
git log --oneline
ํ์ผ ์์ ๋ฐ ์ฌ์ปค๋ฐ
# 1. ํ์ผ ์์
echo "ํ๋ก์ ํธ ์ค๋ช
์ถ๊ฐ" >> README.md
# 2. ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git diff
# 3. Staging
git add README.md
# 4. Staged ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git diff --staged
# 5. ์ปค๋ฐ
git commit -m "docs: README ๋ด์ฉ ์
๋ฐ์ดํธ"
์ถ๊ฐ ํ: Linux ๋ช
๋ น์ด ํน์ ๊ธฐํธ
- >: ํ์ค ์ถ๋ ฅ์ ํ์ผ๋ก ๋ฎ์ด์ฐ๊ธฐ (redirect)
- >>: ํ์ค ์ถ๋ ฅ์ ํ์ผ ๋์ ์ถ๊ฐ (append)
- ์: echo "text" > file.txt
HEAD์ ๊ฐ๋ ๊ณผ ์ญํ
ํ์ฌ ์์
์ค์ธ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
HEAD์ ํ์ฉ
git log # HEAD ์์น ํ์ธ
git diff # ์ํน ๋๋ ํ ๋ฆฌ์ HEAD ์ปค๋ฐ ๊ฐ ์ฐจ์ด ํ์ธ- HEAD ์์น ์ด๋ ๊ฐ๋ฅ (๊ณผ๊ฑฐ ์ปค๋ฐ์ผ๋ก ์ฒดํฌ์์)
- ์์ ๊ณต๊ฐ์ด ์ด์ํ ๋: ํญ์ HEAD ์์น ํ์ธ ํ์
- HEAD๊ฐ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค์ง ์์ผ๋ฉด ์์ ๊ณต๊ฐ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ
๋ธ๋์น(Branch) ๊ฐ๋
- ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- ์์ ๊ณต๊ฐ์ ๋ถ๊ธฐํ๋ ๊ธฐ๋ฅ
- ๊ฒ์์ ์ ํ์ง์ฒ๋ผ ์ฌ๋ฌ ๊ฒฝ๋ก๋ก ๊ฐ๋ฐ ๊ฐ๋ฅ

๋ธ๋์น์ ํ์์ฑ
๋ฌธ์ ์ํฉ ์์:
๋ฉ์ธ ๋ธ๋์น: A โ B โ C (์ฐ์ปด ํ๋ฉด ์์ฑ)
๊ฐ๋ฐ์๊ฐ C์์ ์ง์ D(๋ก๊ทธ์ธ) ์ถ๊ฐ
โ ๋ค๋ฅธ ํ์์ด ๋์ ์์
์ ์ถฉ๋ ๋ฐ์
โ ์ฐ์ปด ํ๋ฉด์กฐ์ฐจ ์๋ ์ ํ ์ ์์ํด๊ฒฐ ๋ฐฉ์:
๋ฉ์ธ ๋ธ๋์น: A โ B โ C (ํญ์ ์ ์ ๋์)
โ
๋๋ฒจ๋กญ ๋ธ๋์น: D โ E โ F (๋ก๊ทธ์ธ ๊ธฐ๋ฅ)
๋ธ๋์น ์์
ํ๋ฆ
- ๋ฉ์ธ ๋ธ๋์น: ํญ์ ์ ์ ๋์ํ๋ ์ฝ๋๋ง ์ ์ง
- ๊ธฐ๋ฅ ๋ธ๋์น: ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ๋ณ๋ ๊ณต๊ฐ
- ํ ์คํธ & ๋ฆฌ๋ทฐ: ์ถฉ๋ถํ ๊ฒ์ฆ ํ
- ๋จธ์ง(Merge): ๋ฉ์ธ ๋ธ๋์น์ ๋ฐ์
๋ธ๋์น ์์ฑ ๊ธฐ์ค
- ๊ฐ๋ฐ ๋จ์๋ณ: ๊ธฐ๋ฅ ํ๋๋น ๋ธ๋์น ํ๋
- ๋ฆฌ๋ทฐ ๋จ์๋ณ: ์ฝ๋๋ฆฌ๋ทฐ ๋ฐ์ ๋ฌถ์ ๋จ์๋ก ์์ฑ
- ์์:
๋ธ๋์น ๋ค์ด๋ฐ
- ๊ธฐ๋ฅ ๋ธ๋์น: feature/shopping-cart-list
- ๋ฒ๊ทธ ์์ : bugfix/cart-delete-error
- ํซํฝ์ค: hotfix/critical-security-patch
๋ธ๋์น ๋ช ๋ น์ด
๋ธ๋์น ์์ฑ ๋ฐ ๊ด๋ฆฌ
# ๋ธ๋์น ์์ฑ
git branch develop
# ๋ธ๋์น ๋ชฉ๋ก ์กฐํ
git branch
# ๋ธ๋์น ์ ํ (์ฒดํฌ์์)
git checkout develop
# ๋ธ๋์น ์์ฑ + ์ ํ (๋จ์ถ)
git checkout -b feature-login
๋ฒ ์ด์ค(Base) ๊ฐ๋
- ์ ๋ธ๋์น๋ ํ์ฌ ์ฒดํฌ์์๋ ๋ธ๋์น๋ฅผ ๋ฒ ์ด์ค๋ก ์์ฑ
- ๋ฉ์ธ ๋ธ๋์น ์ฒดํฌ์์ ์ํ์์ ์์ฑ โ ๋ฉ์ธ์ ํ์คํ ๋ฆฌ ๊ณ์น
- ์์ ์ ๋ฐ๋์ ํ์ธ: ํ์ฌ HEAD ์์น ํ์ธ ํ์
๋ธ๋์น ๋ณํฉ
# ๋ฉ์ธ ๋ธ๋์น๋ก ์ด๋
git checkout main
# develop ๋ธ๋์น ๋ณํฉ
git merge develop์ฃผ์: ํญ์ ๋ณํฉ๋ ๋์ ๋ธ๋์น๋ก ๋จผ์ ์ด๋
์ค๋ฌด ๊ฐ๋ฐ ํ๋ก์ธ์ค
์ด์ ๊ธฐ๋ฐ ๊ฐ๋ฐ
- ์ด์ ์์ฑ: Jira, Confluence ๋ฑ ์ด์ ํธ๋์ปค
- ๊ฐ๋ฐ ๋ฒ์ ๊ฒฐ์ : ์ด์ ๋ด์ฉ ๊ธฐ๋ฐ
- ๋ธ๋์น ์์ฑ: ๊ธฐ๋ฅ๋ณ ๋ ๋ฆฝ ๋ธ๋์น
- ์ปค๋ฐ ์์ : ์๋ฏธ ์๋ ๋จ์๋ก ์ปค๋ฐ
- ํ ๋ฆฌํ์คํธ(PR): ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฒญ
- ์ฝ๋ ๋ฆฌ๋ทฐ: ํ์๋ค์ ๊ฒํ ๋ฐ ํผ๋๋ฐฑ
- ์น์ธ & ๋จธ์ง: ๋ฆฌ๋ทฐ ์๋ฃ ํ ๋ฉ์ธ ๋ธ๋์น ๋ฐ์
7. Git ์์ ๊ธฐ๋ณธ ์์
# 1. ์ํ ํ์ธ
git status
# 2. ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git diff
# 3. ์คํ
์ด์ง
git add .
# 4. ์ฌํ์ธ
git status
# 5. ์ปค๋ฐ
git commit -m "์ปค๋ฐ ๋ฉ์์ง"
# 6. ๋ก๊ทธ ํ์ธ
git log
์ถ๊ฐ ๋ช ๋ น์ด ๋ฐ ํ
์ด์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ
# ๋ก๊ทธ์์ ์ปค๋ฐ ํด์ ๋ณต์ฌ
git log
# ํน์ ์ปค๋ฐ์ผ๋ก ๊ฐ์ ๋ฆฌ์
git reset --hard <์ปค๋ฐํด์>
๊ธฐ๋ณธ ๋ช ๋ น์ด - add์ restore
git add ๋ช ๋ น์ด
- ์ญํ : Working Directory์ ๋ณ๊ฒฝ์ฌํญ์ Staging Area(Index)์ ๋ฐ์
- git add [ํ์ผ๋ช ]: ํน์ ํ์ผ๋ง ์ถ๊ฐ
- git add .: ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ ์ถ๊ฐ
git restore --staged [ํ์ผ๋ช ]
- ์ญํ : Staged ์ํ์ ํ์ผ์ Unstaged ์ํ๋ก ๋๋๋ฆผ
- ๋ชฉ์ : ์๋ชป addํ ํ์ผ์ ์ปค๋ฐ ๋์์์ ์ ์ธ
- ๋ณ๊ฒฝ์ฌํญ ์์ฒด๋ Working Directory์ ์ ์ง๋จ
git restore [ํ์ผ๋ช ]
- ์ญํ : Working Directory์ ๋ณ๊ฒฝ์ฌํญ์ ์์ ํ ์ญ์
- ์ฃผ์: ๋ณ๊ฒฝ์ฌํญ์ด ์์ ํ ์ฌ๋ผ์ง๋ฏ๋ก ์ ์คํ๊ฒ ์ฌ์ฉ
- ์ต์ ์์ด ํ์ผ๋ช ๋ง ์ ๋ ฅ
Commit ๊ด๋ จ ๋ช ๋ น์ด
git commit --amend (์ด๋งจ๋ ์ต์ )
- ์ญํ : ๋ง์ง๋ง ์ปค๋ฐ์ ์๋ก์ด ๋ด์ฉ์ผ๋ก ๋์ฒด
- ๋์ ๊ณผ์ :
- ๊ธฐ์กด ๋ง์ง๋ง ์ปค๋ฐ์ด ์ฌ๋ผ์ง
- ์๋ก์ด ๋ณ๊ฒฝ์ฌํญ์ด ํฌํจ๋ ์ปค๋ฐ์ผ๋ก ๊ต์ฒด
- ์๋ก์ด ์ปค๋ฐ ID๊ฐ ํ ๋น๋จ
- ์ฌ์ฉ ์๋๋ฆฌ์ค:
- ๋ง์ง๋ง ์ปค๋ฐ ์งํ ๋น ๋จ๋ฆฐ ๋ด์ฉ ๋ฐ๊ฒฌ
- ์ปค๋ฐ ๋ฉ์์ง ์์ ํ์
- ์ปค๋ฐ ๋ฉ์์ง ์์ ์ฐฝ์ด ์๋์ผ๋ก ์ด๋ฆผ
git commit --fixup HEAD (ํฝ์ค์ ์ต์ )
- ์ญํ : ์ด์ ์ปค๋ฐ์ ์ ์งํ๋ฉด์ ์์ ์ปค๋ฐ์ ์ถ๊ฐ
- ๋์ ๊ณผ์ :
- ๊ธฐ์กด HEAD ์ปค๋ฐ์ ๊ทธ๋๋ก ์ ์ง
- ๊ทธ ์์ ์๋ก์ด fixup ์ปค๋ฐ ์์ฑ
- HEAD๊ฐ ์ ์ปค๋ฐ์ผ๋ก ์ด๋
- ์ปค๋ฐ ๋ฉ์์ง: ์๋์ผ๋ก "fixup! [์๋ณธ ๋ฉ์์ง]" ํ์์ผ๋ก ์์ฑ
- ์ฐจ์ด์ : amend๋ ๋์ฒด, fixup์ ์ถ๊ฐ
์ค์ต ์์
# ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git status
git diff
# add ํ amend๋ก ์ปค๋ฐ
git add .
git commit --amend
# โ ์ด์ ์ปค๋ฐ์ด ์ ์ปค๋ฐ์ผ๋ก ๋์ฒด๋จ
# fixup์ผ๋ก ์ปค๋ฐ
git add .
git commit --fixup HEAD
# โ ์๋ก์ด fixup ์ปค๋ฐ์ด ์ถ๊ฐ๋จ
ํ์ผ ์ด๋ ๋ฐ ์ด๋ฆ ๋ณ๊ฒฝ - mv ๋ช ๋ น์ด
๋ฆฌ๋ ์ค mv ๋ช ๋ น์ด
- ํ์ผ๋ช ๋ณ๊ฒฝ๊ณผ ๊ฒฝ๋ก ์ด๋ ๋ชจ๋ ๊ฐ๋ฅ
- mv a.txt b.txt: ํ์ผ๋ช ๋ณ๊ฒฝ
- mv b.txt ./basic/: ํ์ผ ์ด๋
Git mv ๋ช ๋ น์ด
- ํ์: git mv [์๋ณธํ์ผ] [๋์ํ์ผ]
- ์ฅ์ : ์ด๋ฆ ๋ณ๊ฒฝ์ ์๋์ผ๋ก staged ์ํ๋ก ์ถ๊ฐ
- ์์: git mv "What I like.txt" "What I love.txt"
- ์ํ ํ์ธ: git status์์ "renamed:" ๋ก ํ์
- diff ํ์ธ: ์ด๋ฆ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ช ํํ๊ฒ ํ์
ํ์ผ ์ญ์ - rm ๋ช ๋ น์ด
git rm [ํ์ผ๋ช ]
- ์ญํ : ํ์ผ ์ญ์ + ๋ณ๊ฒฝ์ฌํญ์ ์๋์ผ๋ก staging
- ๋์:
- Working Directory์์ ํ์ผ ์ค์ ์ญ์
- ์ญ์ ๋ณ๊ฒฝ์ฌํญ์ ์๋์ผ๋ก Index์ ์ถ๊ฐ
- ํ์ธ: git status์์ "deleted:" ๋ก ํ์
๋ธ๋์น ์๊ฐํ
๊ทธ๋ํ ์ต์
git log --oneline --graph- ๋ธ๋์น๊ฐ ์ด๋์ ๋ถ๊ธฐ๋์๋์ง ํ์ธ
- ์ปค๋ฐ ์ด๋ ฅ์ด ์ด๋ป๊ฒ ์์๋์ง ํ์
- ๋ณต์กํ ๋ธ๋์น ๊ตฌ์กฐ์์ ํ์์
์ด์ ์ํ๋ก ๋ณต๊ตฌ
Reflog ํ์ฉํ Reset
์ค์ต ์์:
git reflog # HEAD ์ด๋ ์ด๋ ฅ ํ์ธ
git reset --hard [commit_id] # ํน์ ์ปค๋ฐ์ผ๋ก ๋ณต๊ตฌ- reflog๋ก ์ด์ ์ปค๋ฐ ID ํ์ธ
- ๋ณต์ฌํ ์ปค๋ฐ ID๋ก reset
- ๋ณํฉ ์ด์ ์ํ๋ก ๋ณต๊ตฌ ๊ฐ๋ฅ
- ๋ฐฉ๋ฒ 1: reflog๋ก ์ปค๋ฐ ID ์ฐพ๊ธฐ
- ๋ฐฉ๋ฒ 2: git log์์ ๋์์ ๋ ๋ฒ์งธ ์ปค๋ฐ์ผ๋ก reset
๋ธ๋์น ๋ณํฉ: Merge vs Rebase
๊ณตํต์
- ๋ชฉ์ : ๋ถ๊ธฐํ ๋ธ๋์น๋ฅผ ๋ฒ ์ด์ค ๋ธ๋์น๋ก ๋ฐ์
- ์ต์ข ์์ค ์ฝ๋: ๋์ผํ ๊ฒฐ๊ณผ
- ์ฐจ์ด: diff๋ฅผ ๊ธฐ์กด ๋ธ๋์น์ ํฉ์น๋ ๋ฐฉ์

Merge ๋ฐฉ์
ํน์ง:
- ๋ช ์์ ์ธ ๋จธ์ง ์ปค๋ฐ(Merge Commit) ์์ฑ
- ๋ธ๋์น ํ์คํ ๋ฆฌ๊ฐ ๊ฐ์ง์น๊ธฐ ํํ๋ก ๋ณด์กด๋จ
- ๊ทธ๋ํ์์ ๋ถ๊ธฐ๊ฐ ์๊ฐ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
์ปค๋ฐ ํ์คํ ๋ฆฌ:
- ๋ฉ์ธ ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ๊ณผ ์์ ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ์ด ๋ณ๋ ๋ผ์ธ์ผ๋ก ํ์
- ์ต์ข ์ ์ผ๋ก ๋จธ์ง ์ปค๋ฐ์์ ํฉ์ณ์ง
- ์ฌ์ฉ ์ฌ๋ก: ํฐ ๋จ์์ ๋ธ๋์นญ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ๊ณ ์ถ์ ๋
Merge ์ค์ต
์ ์ฐจ:
git checkout main # ๋ฉ์ธ ๋ธ๋์น๋ก ์ด๋
git merge testing # testing ๋ธ๋์น ๋ณํฉ๊ฒฐ๊ณผ:
- ๋ฉ์ธ ๋ธ๋์น๊ฐ testing์ ์ปค๋ฐ์ ํฌํจ
- HEAD๊ฐ ๋ฉ์ธ์ ๊ฐ๋ฆฌํด
- ์ฝ๋ ์ํ๋ testing๊ณผ ๋์ผ
Rebase ๋ฐฉ์
ํน์ง:
- ๋จธ์ง ์ปค๋ฐ ์์ด ์ผ์ง์ ํ์คํ ๋ฆฌ ์์ฑ
- ๋ฒ ์ด์ค๋ฅผ ๋ค์ ์๋ ๋ฐฉ์
- ๋ชจ๋ ์ปค๋ฐ์ด ๋ฉ์ธ ๋ธ๋์น์์ ์์ ํ ๊ฒ์ฒ๋ผ ๋ณด์
๋์ ์๋ฆฌ:
- ์์ ๋ธ๋์น์ ์ปค๋ฐ์ ์์ ์ ์ฅ
- ๋ฉ์ธ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ ๋ฒ ์ด์ค๋ก ์ค์
- ์์ ์ ์ฅํ ์ปค๋ฐ์ ์ ๋ฒ ์ด์ค ์์ ์์ฐจ์ ์ผ๋ก ์ ์ฉ
- ๋ช ๋ น์ด: git rebase <๋ธ๋์น๋ช >
- ๊น๋ํ ํ์คํ ๋ฆฌ ์ ์ง, ์ ํ์ ์ธ ์ปค๋ฐ ๋ก๊ทธ ์ ํธ ์
Rebase ์ค์ต
์ ์ฐจ:
git checkout main
git rebase testing๊ฒฐ๊ณผ:
- ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ merge์ ์ ์ฌ
- ํ์ผ ๋ด์ฉ ๋์ผ
์ต์ข ๊ฒฐ๊ณผ๋ฌผ
์ฝ๋ ์ํ๋ ๋์ผ: Merge๋ Rebase๋ ์ต์ข
์ฝ๋๋ ๊ฐ์
์ฐจ์ด์
์ฐจ์ด์ ์ ํ์คํ ๋ฆฌ: ์ปค๋ฐ ๋ก๊ทธ์ ๋ชจ์์๋ง ๋ค๋ฆ
๋จ์ ์์
: ํฐ ์ฐจ์ด ์์
๋ณต์กํ ์์
:
- ๋ณ๊ฒฝ ๊ท๋ชจ๊ฐ ํด ๋
- ๋ค๋ฅธ ์ฌ๋์ ์์ ์ด ๋ฉ์ธ ๋ธ๋์น์ ์ถ๊ฐ๋ ํ ๋ณํฉ ์
- ์ปค๋ฐ ์ด๋ ฅ ๋ชจ์์ด ๋ฌ๋ผ์ง
Git ์ถฉ๋(Conflict) ๊ฐ๋

์ถฉ๋ ๋ฐ์ ์๋๋ฆฌ์ค
- ๋ฐ์ ์กฐ๊ฑด: ๋ฉ์ธ ๋ธ๋์น์์ ์ ๋ธ๋์น๋ฅผ ๋ง๋ ํ, ๋ฉ์ธ ๋ธ๋์น๊ฐ ๋ณ๊ฒฝ๋๊ณ ๋์์ ์ ๋ธ๋์น์์๋ ๊ฐ์ ํ์ผ์ ์์ ํ ๊ฒฝ์ฐ
์์ ์ํฉ:
- C1 ์ปค๋ฐ์์ ๋ธ๋์น ๋ถ๊ธฐ โ ๋ฉ์ธ์ C2 ์ปค๋ฐ ์ถ๊ฐ โ ๋ถ๊ธฐ ๋ธ๋์น์ C3 ์ปค๋ฐ ์ถ๊ฐ
- ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ์๋ก ๋ค๋ฅด๊ฒ ์์
- ํจ์ ์๊ทธ๋์ฒ ๋ณ๊ฒฝ: ํ์ชฝ์์๋ ์ธ์ ์ด๋ฆ ๋ณ๊ฒฝ, ๋ค๋ฅธ ์ชฝ์์๋ ์ธ์ ์ญ์
์ถฉ๋ ๋ฐ๊ฒฌ ์ ์ํ ํ์ธ
- git status ๋ช ๋ น์ด๋ก ์ถฉ๋ ์ํ ํ์ธ
- ํฐ๋ฏธ๋ ํ์: "You have unmerged paths", "fix conflicts"
- ์ถฉ๋ ํ์ผ์ <<<<<<<, =======, >>>>>>> ๋ง์ปค ํ์
์ถฉ๋ ํด๊ฒฐ ์ ์ฐจ
- git diff๋ก ์ถฉ๋ ๋ด์ฉ ํ์ธ
- ์ถฉ๋ ๋ง์ปค ํ์ธ:
- <<<<<<< HEAD: ํ์ฌ ๋ธ๋์น(๋ฉ์ธ) ๋ณ๊ฒฝ์ฌํญ
- =======: ๊ตฌ๋ถ์
- >>>>>>> branch-name: ๋จธ์งํ๋ ค๋ ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ
- ์ ํ์ง:
- ์ต์ 1: ๋ฉ์ธ ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ ์ ํ
- ์ต์ 2: ๋จธ์ง ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ ์ ํ
- ์ต์ 3: ๋ ๋ณ๊ฒฝ์ฌํญ ๋ชจ๋ ์ ์ง
- ์ต์ 4: ์์ ํ ์๋ก์ด ์ฝ๋ ์์ฑ
- ์ถฉ๋ ํด๊ฒฐ ํ git add <ํ์ผ๋ช >์ผ๋ก ๋งํน
- git commit์ผ๋ก ๋จธ์ง ์ปค๋ฐ ์๋ฃ
์ถฉ๋ ์ทจ์
- git merge --abort: ๋จธ์ง ์๋ ์ทจ์, ์ด์ ์ํ๋ก ๋ณต๊ท
Stash ๋ช ๋ น์ด
- ์ํฉ: ์ปค๋ฐํ์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ด ์๋๋ฐ ๋ธ๋์น ์ ํ์ด๋ Merge/Rebase๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ๋ฌธ์ : Unstaged ์ํ์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ๋ฉด ๋ธ๋์น ๋ณ๊ฒฝ ๋ช ๋ น์ด ์คํ ๋ถ๊ฐ
Stash ๋์ ์๋ฆฌ
- ์ ์ฅ: git stash - ์ํน ๋๋ ํ ๋ฆฌ์ ๋ณ๊ฒฝ์ฌํญ์ ์์ ๊ณต๊ฐ์ ์ ์ฅ
- ์กฐํ: git stash list - ์ ์ฅ๋ stash ๋ชฉ๋ก ํ์ธ
- ๋ณต์: git stash pop - ๊ฐ์ฅ ์ต๊ทผ stash๋ฅผ ์ํน ๋๋ ํ ๋ฆฌ๋ก ๋ณต์
- ํน์ ๋ณต์: git stash apply stash@{0} - ํน์ stash ๋ณต์
Stash ํ์ฉ ์ํฌํ๋ก์ฐ
- ์์ ์ค ์ปค๋ฐ ์ ์ํ์์ git stash ์คํ
- ๋ธ๋์น ๋ณ๊ฒฝ ๋๋ merge/rebase ์ํ
- ์์ ์๋ฃ ํ git stash pop์ผ๋ก ์์ ๋ด์ฉ ๋ณต์
- ๊ณ์ ์์ ์งํ
Fetch vs Pull
Fetch ๋ช ๋ น์ด
- ๊ธฐ๋ฅ: ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ์ฌํญ์ ๋ก์ปฌ๋ก ๋ฐ๊ธฐ๋ง ํจ
- ์ํน ๋๋ ํ ๋ฆฌ๋ ๋ณ๊ฒฝ๋์ง ์์
- ์๊ฒฉ ๋ธ๋์น ์ ๋ณด๋ง ์ ๋ฐ์ดํธ
- ์์ ํ ๋ฐฉ์
- ๋ช ๋ น์ด: git fetch origin main
- ์ดํ ์์ : ์๋์ผ๋ก git merge ๋๋ git rebase ํ์
Pull ๋ช ๋ น์ด
- ๊ธฐ๋ฅ: Fetch + Merge (๋๋ Rebase)๋ฅผ ํ ๋ฒ์ ์ํ
- ์๊ฒฉ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์์ ์ฆ์ ํ์ฌ ๋ธ๋์น์ ์ ์ฉ
- ์ถฉ๋ ๊ฐ๋ฅ์ฑ ์์
- ๋น ๋ฅด์ง๋ง ์ํํ ์ ์์
๋ช ๋ น์ด:
- git pull (๊ธฐ๋ณธ: fetch + merge)
- git pull --rebase (fetch + rebase)
๊ถ์ฅ ์ํฌํ๋ก์ฐ
- git fetch origin - ์๊ฒฉ ๋ณ๊ฒฝ์ฌํญ ํ์ธ
- git log ๋๋ git diff๋ก ๋ณ๊ฒฝ๋ด์ฉ ๊ฒํ
- ํ์์ git stash๋ก ์์ ๋ด์ฉ ์์ ์ ์ฅ
- git rebase origin/main - ๋ฒ ์ด์ค ์ ๋ฐ์ดํธ
- git stash pop - ์์ ๋ด์ฉ ๋ณต์
- ์์ ์๋ฃ ํ ์ปค๋ฐ ๋ฐ ํธ์
- ์ฝ๋๋ฆฌ๋ทฐ ์ ํ์ ์์
- Fetch: ์๊ฒฉ ๋ฉ์ธ ๋ธ๋์น ์ต์ ํ ํ์ธ
- Rebase: ๋ฉ์ธ ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ์ ์์ ๋ธ๋์น ๋ฒ ์ด์ค๋ก ์ ๋ฐ์ดํธ
- ์ถฉ๋ ํด๊ฒฐ: ์ถฉ๋ ๋ฐ์ ์ ๋ก์ปฌ์์ ํด๊ฒฐ
- Push: ์ถฉ๋ ์๋ ๊น๋ํ ์ํ๋ก Push
- Pull Request: ์ฝ๋๋ฆฌ๋ทฐ ์์ฒญ
Force Push ์ฌ์ฉ๋ฒ
Force Push๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ๋ฏผ๊ฐ์ ๋ณด ์ปค๋ฐ ์ ๊ฑฐ: ๋น๋ฐ๋ฒํธ, API ํค ๋ฑ์ด ์ค์๋ก ์ปค๋ฐ๋ ๊ฒฝ์ฐ
- ์ปค๋ฐ ํ์คํ ๋ฆฌ ์์ : ์ด๋ฏธ ํธ์ํ ์ปค๋ฐ์ ๋ก์ปฌ์์ ์์ ํ ๊ฒฝ์ฐ
Force Push ์ ์ฐจ
- ๋ก์ปฌ์์ ์ปค๋ฐ ์์ : git reset, git commit --amend ๋ฑ ์ฌ์ฉ
- ๊ฐ์ ํธ์: git push --force origin main
- ์ฃผ์: ์๊ฒฉ์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ฎ์ด์์์ง
๋ฏผ๊ฐ์ ๋ณด ์ ๊ฑฐ ์์
# ๋ฌธ์ ์ปค๋ฐ ์ด์ ์ผ๋ก ๋ฆฌ์
git reset --soft HEAD~1
# ๋ฌธ์ ํ์ผ ์ ์ธํ๊ณ ๋ค์ ์ปค๋ฐ
git add a.txt b.txt
git commit -m "Fix: remove sensitive data"
# ๊ฐ์ ํธ์
git push --force origin main