์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[KB IT's your life] 10์ผ์ฐจ - Git ํŠน๊ฐ•(1)

yeye 2026. 3. 19. 11:15

ํ•™์Šต ๋ชฉํ‘œ

  • Git์„ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋กœ์ปฌ(Local)๊ณผ ์›๊ฒฉ(Remote) ๊ฐœ๋…์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ปค๋ฐ‹(Commit), ์Šคํ…Œ์ด์ง€(Stage), ๋ธŒ๋žœ์น˜(Branch) ๋“ฑ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค
  • ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ Git ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ด๋“œ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

Git์˜ ํ•„์š”์„ฑ๊ณผ ์—ญ์‚ฌ

Git์ด๋ž€?

  • ์ •์˜: ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋„๊ตฌ 
  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ:
    • ํŒŒ์ผ์˜ ์ƒํƒœ ์ €์žฅ
    • ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ๊ธฐ๋ก ์ €์žฅ (ํ•ต์‹ฌ!)
  • ๋ถ„๋ฅ˜: ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (Distributed VCS)

๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋ฐœ์ „

๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค

1์„ธ๋Œ€: ๋กœ์ปฌ VCS

  • ๊ฐœ๋ฐœ์ž ์ปดํ“จํ„ฐ์—์„œ๋งŒ ๊ด€๋ฆฌ
  • ํ˜‘์—… ๋ถˆ๊ฐ€๋Šฅ

2์„ธ๋Œ€: ์ค‘์•™์ง‘์ค‘์‹ VCS (Centralized VCS)

  • ์„œ๋ฒ„ 1๋Œ€์— ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์„ค์น˜
  • ํŒ€์›๋“ค์ด ๊ณต๋™์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ์‚ฌ์šฉ

๋ฌธ์ œ์ :

  • SPOF (Single Point of Failure): ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์ „์ฒด ์ž‘์—… ์ค‘๋‹จ
  • ์„œ๋ฒ„๊ฐ€ ๋ณ‘๋ชฉ ์ง€์ ์ด ๋จ
๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค

3์„ธ๋Œ€: ๋ถ„์‚ฐ VCS

์˜ˆ์‹œ: Git

  • ์ฝ”๋“œ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ(Clone) ๊ฐ€๋Šฅ
  • ๊ฐ ๋กœ์ปฌ ํ™˜๊ฒฝ์ด ์™„์ „ํ•œ ์ €์žฅ์†Œ ์—ญํ• 
  • ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ์ž‘์—… ๊ฐ€๋Šฅ
  • ๋กœ์ปฌ์—์„œ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

์‹ค์ œ ์‚ฌ๋ก€ :

  • ์ปค๋ฐ‹ ์ˆ˜: ์•ฝ 19,000๊ฐœ
  • ๊ฐ ํŒŒ์ผ๋ณ„๋กœ ๋ณ€๊ฒฝ ์ด์œ , ์‹œ์ , ์ž‘์„ฑ์ž ์ถ”์  ๊ฐ€๋Šฅ
  • ํŠน์ • ์ฝ”๋“œ ๋ผ์ธ ์„ ํƒ โ†’ ์–ธ์ œ, ์™œ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
  • PR(Pull Request) ๋งํฌ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‚ด์—ญ ํ™•์ธ

์žฅ์ :

  1. ์ด๋ ฅ ํŒŒ์•…: 4๋…„ ์ „, 2๋…„ ์ „ ์ฝ”๋“œ ๋ณ€๊ฒฝ ๋‚ด์—ญ ํ™•์ธ
  2. ์ž‘์„ฑ์ž ํ™•์ธ: ๋ˆ„๊ฐ€ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์ถ”์ 
  3. ๋ณ€๊ฒฝ ๋ชฉ์  ์ดํ•ด: ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ๋งฅ๋ฝ ํŒŒ์•…
  4. ๋…๋ฆฝ์  ํ•™์Šต: ๋‹ค๋ฅธ ์‚ฌ๋žŒ ๋„์›€ ์—†์ด๋„ ์ฝ”๋“œ ์ดํ•ด ๊ฐ€๋Šฅ

AI ์‹œ๋Œ€์™€ Git ํ•™์Šต์˜ ์˜๋ฏธ

LLM (Large Language Model)์ด๋ž€?

  • ์ •์˜: ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ
  • ๋™์ž‘ ์›๋ฆฌ:
    • ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต
    • ๋‹ค์Œ ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋„๋ก ํ›ˆ๋ จ๋จ
    • ๋ถ„ํฌ์˜ ํŒจํ„ด์„ ํ•™์Šตํ•˜์—ฌ ๊ทธ๋Ÿด์‹ธํ•œ ๋‹ต๋ณ€ ์ƒ์„ฑ

 

Git ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ๋ช…๋ น์–ด 

๋ช…๋ น์–ด์„ค๋ช…์˜ˆ์‹œ
pwdPrint Working Directory (ํ˜„์žฌ ๊ฒฝ๋กœ ์ถœ๋ ฅ)pwd
cdChange Directory (๋””๋ ‰ํ† ๋ฆฌ ์ด๋™)cd basic
cd..์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™cd..
lsList (ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก ์ถœ๋ ฅ)ls
ls -al์ˆจ๊น€ ํŒŒ์ผ ํฌํ•จ ์ƒ์„ธ ๋ชฉ๋กls -al
mkdirMake Directory (ํด๋” ์ƒ์„ฑ)mkdir basic
clear์ฝ˜์†” ํ™”๋ฉด ์ง€์šฐ๊ธฐclear
manManual (๋ช…๋ น์–ด ๋งค๋‰ด์–ผ)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 ๋“ฑ์˜ ์„œ๋ฒ„์— ์žˆ๋Š” ์ €์žฅ์†Œ
 
์ƒ์„ฑ ๋ฐฉ๋ฒ•:

  1. ์ƒˆ๋กœ ์ƒ์„ฑ: git init
  2. ๋ณต์ œ: git clone <url>

์ปค๋ฐ‹ (Commit)

์ •์˜:

  • Commitment = ์•ฝ์†, ๋„์žฅ ์ฐ๊ธฐ
  • ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ €์žฅํ•˜๋Š” ๋‹จ์œ„
  • ์ฝ”๋“œ์˜ ์Šค๋ƒ…์ƒท

ํŠน์ง•:

  • ๊ฐ ์ปค๋ฐ‹์€ ๊ณ ์œ ํ•œ ํ•ด์‹œ๊ฐ’(ID)์„ ๊ฐ€์ง
  • ๊ณผ๊ฑฐ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” Pointer ๊ตฌ์กฐ
  • Linked List์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋จ
  • ์ตœ์‹  ์ปค๋ฐ‹ โ†’ ๊ณผ๊ฑฐ ์ปค๋ฐ‹ ๋ฐฉํ–ฅ

Git์˜ ํŒŒ์ผ ๊ด€๋ฆฌ ๋ฐฉ์‹

Snapshot ๋ฐฉ์‹

๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฒ„์ „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

 

์‹ค์Šต: ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ณต์ œ

๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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)
![์ด๋ฏธ์ง€](์ด๋ฏธ์ง€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 (๋กœ์ปฌ ์šฐ์„ )

ํ”„๋กœ์„ธ์Šค:

  1. ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ: mkdir project
  2. ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™: cd project
  3. Git ์ดˆ๊ธฐํ™”: git init
  4. ํŒŒ์ผ ์ž‘์—… ๋ฐ ์ปค๋ฐ‹
  5. GitHub์— ์›๊ฒฉ ์ €์žฅ์†Œ ์ƒ์„ฑ (๋นˆ ์ €์žฅ์†Œ, ์ฒดํฌ๋ฐ•์Šค ๋ชจ๋‘ ํ•ด์ œ)
  6. ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ: git remote add origin <URL>
  7. ํ‘ธ์‹œ: git push -u origin main

์ฃผ์˜์‚ฌํ•ญ: GitHub์—์„œ ์ €์žฅ์†Œ ์ƒ์„ฑ ์‹œ README, .gitignore, license ์ถ”๊ฐ€ ์˜ต์…˜ ๋ชจ๋‘ ์ฒดํฌ ํ•ด์ œ
 

๋ฐฉ๋ฒ• 2: git clone (์›๊ฒฉ ์šฐ์„ ) - ๊ถŒ์žฅ

ํ”„๋กœ์„ธ์Šค:

  1. GitHub์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ ์ƒ์„ฑ
  2. README, .gitignore ๋“ฑ ์„ ํƒ์  ์ถ”๊ฐ€
  3. ๋กœ์ปฌ๋กœ ๋ณต์ œ: git clone <URL>
  4. ์ž๋™์œผ๋กœ .git ํด๋” ๋ฐ ์›๊ฒฉ ์—ฐ๊ฒฐ ์„ค์ •๋จ

์žฅ์ :

  • ์ดˆ๊ธฐ ์„ค์ •์ด ์ž๋™์œผ๋กœ ์™„๋ฃŒ
  • ์›๊ฒฉ ์—ฐ๊ฒฐ ์ˆ˜๋™ ์„ค์ • ๋ถˆํ•„์š”

 

GitHub ์ €์žฅ์†Œ ์ƒ์„ฑ ์˜ต์…˜

๊ธฐ๋ณธ ์„ค์ •

  • Repository name: ์ €์žฅ์†Œ ์ด๋ฆ„ (๋กœ์ปฌ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜์ง€ ์•Š์•„๋„ ๋จ)
  • Public/Private: ๊ณต๊ฐœ ์—ฌ๋ถ€ ์„ ํƒ

์ดˆ๊ธฐ ํŒŒ์ผ ์˜ต์…˜

  • README.md: ํ”„๋กœ์ ํŠธ ์„ค๋ช… ํŒŒ์ผ
  • .gitignore: Git ์ถ”์  ์ œ์™ธ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ
    • ์–ธ์–ด๋ณ„ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต (Java, Python, Node ๋“ฑ)
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๋Š” ์–ธ์–ด ์„ ํƒ
  • License: ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ ์Šค (ํ•™์Šต์šฉ์€ ๋ถˆํ•„์š”)

๋นˆ ์ €์žฅ์†Œ ์ƒ์„ฑ ์‹œ:

  • ๋ชจ๋“  ์ฒดํฌ๋ฐ•์Šค ํ•ด์ œ โ†’ ์•ˆ๋‚ด ๋ช…๋ น์–ด ์ œ๊ณต
  • ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ โ†’ ์ดˆ๊ธฐ ์ปค๋ฐ‹ ์ž๋™ ์ƒ์„ฑ

Commit ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ฐ€์ด๋“œ

์ค‘์š”์„ฑ

  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋„๊ตฌ: ๊ฐœ๋ฐœ์ž์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋Šฅ๋ ฅ
  • ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•œ ์„ค๋ช…์„œ: ๋‚˜์ค‘์— ์ฝ์–ด๋„ ์ดํ•ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ํ˜‘์—…์˜ ํ•ต์‹ฌ: ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ์–ด๋„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ํŒŒ์•… ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์ž‘์„ฑ ์›์น™

  • ๋ช…ํ™•ํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑ
  • ๋ณ€๊ฒฝ ๋ชฉ์ ๊ณผ ๋‚ด์šฉ์„ ๋ชจ๋‘ ํฌํ•จ
  • ํ”„๋กœ์ ํŠธ๋ณ„ ์ž‘์„ฑ ๊ทœ์น™(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) ๊ฐœ๋…

  • ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
  • ์ž‘์—… ๊ณต๊ฐ„์„ ๋ถ„๊ธฐํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๊ฒŒ์ž„์˜ ์„ ํƒ์ง€์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜์˜ ํ•„์š”์„ฑ

๋ฌธ์ œ ์ƒํ™ฉ ์˜ˆ์‹œ:

๋ฉ”์ธ ๋ธŒ๋žœ์น˜: A โ†’ B โ†’ C (์›ฐ์ปด ํ™”๋ฉด ์™„์„ฑ)
๊ฐœ๋ฐœ์ž๊ฐ€ C์—์„œ ์ง์ ‘ D(๋กœ๊ทธ์ธ) ์ถ”๊ฐ€
โ†’ ๋‹ค๋ฅธ ํŒ€์›์ด ๋™์‹œ ์ž‘์—… ์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ
โ†’ ์›ฐ์ปด ํ™”๋ฉด์กฐ์ฐจ ์ž‘๋™ ์•ˆ ํ•  ์ˆ˜ ์žˆ์Œ

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ:

๋ฉ”์ธ ๋ธŒ๋žœ์น˜: A โ†’ B โ†’ C (ํ•ญ์ƒ ์ •์ƒ ๋™์ž‘)
           โ†“
๋””๋ฒจ๋กญ ๋ธŒ๋žœ์น˜: D โ†’ E โ†’ F (๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ)

 
๋ธŒ๋žœ์น˜ ์ž‘์—… ํ๋ฆ„

  1. ๋ฉ”์ธ ๋ธŒ๋žœ์น˜: ํ•ญ์ƒ ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ์œ ์ง€
  2. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜: ์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ณ„๋„ ๊ณต๊ฐ„
  3. ํ…Œ์ŠคํŠธ & ๋ฆฌ๋ทฐ: ์ถฉ๋ถ„ํ•œ ๊ฒ€์ฆ ํ›„
  4. ๋จธ์ง€(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

์ฃผ์˜: ํ•ญ์ƒ ๋ณ‘ํ•ฉ๋  ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋กœ ๋จผ์ € ์ด๋™
 
 

์‹ค๋ฌด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

์ด์Šˆ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ

  1. ์ด์Šˆ ์ƒ์„ฑ: Jira, Confluence ๋“ฑ ์ด์Šˆ ํŠธ๋ž˜์ปค
  2. ๊ฐœ๋ฐœ ๋ฒ”์œ„ ๊ฒฐ์ •: ์ด์Šˆ ๋‚ด์šฉ ๊ธฐ๋ฐ˜
  3. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ: ๊ธฐ๋Šฅ๋ณ„ ๋…๋ฆฝ ๋ธŒ๋žœ์น˜
  4. ์ปค๋ฐ‹ ์ž‘์—…: ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์ปค๋ฐ‹
  5. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR): ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์š”์ฒญ
  6. ์ฝ”๋“œ ๋ฆฌ๋ทฐ: ํŒ€์›๋“ค์˜ ๊ฒ€ํ†  ๋ฐ ํ”ผ๋“œ๋ฐฑ
  7. ์Šน์ธ & ๋จธ์ง€: ๋ฆฌ๋ทฐ ์™„๋ฃŒ ํ›„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ๋ฐ˜์˜

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 (์–ด๋งจ๋“œ ์˜ต์…˜)

  • ์—ญํ• : ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์œผ๋กœ ๋Œ€์ฒด
  • ๋™์ž‘ ๊ณผ์ •:
    1. ๊ธฐ์กด ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ด ์‚ฌ๋ผ์ง
    2. ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ์ปค๋ฐ‹์œผ๋กœ ๊ต์ฒด
    3. ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ID๊ฐ€ ํ• ๋‹น๋จ
  • ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค:
    • ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์งํ›„ ๋น ๋œจ๋ฆฐ ๋‚ด์šฉ ๋ฐœ๊ฒฌ
    • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ํ•„์š”
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ์ฐฝ์ด ์ž๋™์œผ๋กœ ์—ด๋ฆผ

git commit --fixup HEAD (ํ”ฝ์Šค์—… ์˜ต์…˜)

  • ์—ญํ• : ์ด์ „ ์ปค๋ฐ‹์€ ์œ ์ง€ํ•˜๋ฉด์„œ ์ˆ˜์ • ์ปค๋ฐ‹์„ ์ถ”๊ฐ€
  • ๋™์ž‘ ๊ณผ์ •:
    1. ๊ธฐ์กด HEAD ์ปค๋ฐ‹์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€
    2. ๊ทธ ์œ„์— ์ƒˆ๋กœ์šด fixup ์ปค๋ฐ‹ ์ƒ์„ฑ
    3. 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
  • ๋™์ž‘:
    1. Working Directory์—์„œ ํŒŒ์ผ ์‹ค์ œ ์‚ญ์ œ
    2. ์‚ญ์ œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ 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๋ฅผ ๊ธฐ์กด ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๋Š” ๋ฐฉ์‹
๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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) ๊ฐœ๋…

๋ณธ ์ด๋ฏธ์ง€๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค

  • ๋ฐœ์ƒ ์กฐ๊ฑด: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“  ํ›„, ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋™์‹œ์— ์ƒˆ ๋ธŒ๋žœ์น˜์—์„œ๋„ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ

์˜ˆ์‹œ ์ƒํ™ฉ:

  • C1 ์ปค๋ฐ‹์—์„œ ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ โ†’ ๋ฉ”์ธ์— C2 ์ปค๋ฐ‹ ์ถ”๊ฐ€ โ†’ ๋ถ„๊ธฐ ๋ธŒ๋žœ์น˜์— C3 ์ปค๋ฐ‹ ์ถ”๊ฐ€
  • ๊ฐ™์€ ํŒŒ์ผ์˜ ๊ฐ™์€ ๋ถ€๋ถ„์„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •
  • ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ: ํ•œ์ชฝ์—์„œ๋Š” ์ธ์ž ์ด๋ฆ„ ๋ณ€๊ฒฝ, ๋‹ค๋ฅธ ์ชฝ์—์„œ๋Š” ์ธ์ž ์‚ญ์ œ

์ถฉ๋Œ ๋ฐœ๊ฒฌ ์‹œ ์ƒํƒœ ํ™•์ธ

  • git status ๋ช…๋ น์–ด๋กœ ์ถฉ๋Œ ์ƒํƒœ ํ™•์ธ
  • ํ„ฐ๋ฏธ๋„ ํ‘œ์‹œ: "You have unmerged paths", "fix conflicts"
  • ์ถฉ๋Œ ํŒŒ์ผ์— <<<<<<<, =======, >>>>>>> ๋งˆ์ปค ํ‘œ์‹œ

์ถฉ๋Œ ํ•ด๊ฒฐ ์ ˆ์ฐจ

  1. git diff๋กœ ์ถฉ๋Œ ๋‚ด์šฉ ํ™•์ธ
  2. ์ถฉ๋Œ ๋งˆ์ปค ํ™•์ธ:
    • <<<<<<< HEAD: ํ˜„์žฌ ๋ธŒ๋žœ์น˜(๋ฉ”์ธ) ๋ณ€๊ฒฝ์‚ฌํ•ญ
    • =======: ๊ตฌ๋ถ„์„ 
    • >>>>>>> branch-name: ๋จธ์ง€ํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ
  3. ์„ ํƒ์ง€:
    • ์˜ต์…˜ 1: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์„ ํƒ
    • ์˜ต์…˜ 2: ๋จธ์ง€ ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์„ ํƒ
    • ์˜ต์…˜ 3: ๋‘ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ชจ๋‘ ์œ ์ง€
    • ์˜ต์…˜ 4: ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ฝ”๋“œ ์ž‘์„ฑ
  4. ์ถฉ๋Œ ํ•ด๊ฒฐ ํ›„ git add <ํŒŒ์ผ๋ช…>์œผ๋กœ ๋งˆํ‚น
  5. 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 ํ™œ์šฉ ์›Œํฌํ”Œ๋กœ์šฐ

  1. ์ž‘์—… ์ค‘ ์ปค๋ฐ‹ ์ „ ์ƒํƒœ์—์„œ git stash ์‹คํ–‰
  2. ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ ๋˜๋Š” merge/rebase ์ˆ˜ํ–‰
  3. ์ž‘์—… ์™„๋ฃŒ ํ›„ git stash pop์œผ๋กœ ์ž‘์—… ๋‚ด์šฉ ๋ณต์›
  4. ๊ณ„์† ์ž‘์—… ์ง„ํ–‰

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)

๊ถŒ์žฅ ์›Œํฌํ”Œ๋กœ์šฐ

  1. git fetch origin - ์›๊ฒฉ ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ™•์ธ
  2. git log ๋˜๋Š” git diff๋กœ ๋ณ€๊ฒฝ๋‚ด์šฉ ๊ฒ€ํ† 
  3. ํ•„์š”์‹œ git stash๋กœ ์ž‘์—… ๋‚ด์šฉ ์ž„์‹œ ์ €์žฅ
  4. git rebase origin/main - ๋ฒ ์ด์Šค ์—…๋ฐ์ดํŠธ
  5. git stash pop - ์ž‘์—… ๋‚ด์šฉ ๋ณต์›
  6. ์ž‘์—… ์™„๋ฃŒ ํ›„ ์ปค๋ฐ‹ ๋ฐ ํ‘ธ์‹œ

- ์ฝ”๋“œ๋ฆฌ๋ทฐ ์ „ ํ•„์ˆ˜ ์ž‘์—…

  1. Fetch: ์›๊ฒฉ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” ํ™•์ธ
  2. Rebase: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž‘์—… ๋ธŒ๋žœ์น˜ ๋ฒ ์ด์Šค๋กœ ์—…๋ฐ์ดํŠธ
  3. ์ถฉ๋Œ ํ•ด๊ฒฐ: ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ๋กœ์ปฌ์—์„œ ํ•ด๊ฒฐ
  4. Push: ์ถฉ๋Œ ์—†๋Š” ๊น”๋”ํ•œ ์ƒํƒœ๋กœ Push
  5. Pull Request: ์ฝ”๋“œ๋ฆฌ๋ทฐ ์š”์ฒญ

 Force Push ์‚ฌ์šฉ๋ฒ•

Force Push๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ๋ฏผ๊ฐ์ •๋ณด ์ปค๋ฐ‹ ์ œ๊ฑฐ: ๋น„๋ฐ€๋ฒˆํ˜ธ, API ํ‚ค ๋“ฑ์ด ์‹ค์ˆ˜๋กœ ์ปค๋ฐ‹๋œ ๊ฒฝ์šฐ
  • ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์ˆ˜์ •: ์ด๋ฏธ ํ‘ธ์‹œํ•œ ์ปค๋ฐ‹์„ ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ

Force Push ์ ˆ์ฐจ

  1. ๋กœ์ปฌ์—์„œ ์ปค๋ฐ‹ ์ˆ˜์ •: git reset, git commit --amend ๋“ฑ ์‚ฌ์šฉ
  2. ๊ฐ•์ œ ํ‘ธ์‹œ: git push --force origin main
  3. ์ฃผ์˜: ์›๊ฒฉ์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง

 
๋ฏผ๊ฐ์ •๋ณด ์ œ๊ฑฐ ์˜ˆ์‹œ

# ๋ฌธ์ œ ์ปค๋ฐ‹ ์ด์ „์œผ๋กœ ๋ฆฌ์…‹
git reset --soft HEAD~1

# ๋ฌธ์ œ ํŒŒ์ผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์‹œ ์ปค๋ฐ‹
git add a.txt b.txt
git commit -m "Fix: remove sensitive data"

# ๊ฐ•์ œ ํ‘ธ์‹œ
git push --force origin main