๐Ÿ’ป FE

๊นƒ ์›Œํฌ ํ”Œ๋กœ์šฐ

Roy Miller 2025. 5. 13. 14:08

 

๋‹จ์ˆœํžˆ ๋ช…๋ น์–ด๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ , ํ˜‘์—…ํ•˜๋Š” ๊ฒƒ

 

์ •์˜

 

  1. ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ (Working Directory):
    • ๋ฌผ์งˆ์  ๋น„์œ : ์‚ฌ์šฉ์ž๋‹˜์˜ ์ปดํ“จํ„ฐ ์ฑ…์ƒ ์œ„, ํ˜„์žฌ ํŽผ์ณ๋†“๊ณ  ์ž‘์—… ์ค‘์ธ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ๋“ค์ด ๋†“์ธ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ชจ๋“  ํ™œ๋™์ด ์—ฌ๊ธฐ์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
    • ์‹ค์ฒด: ํ”„๋กœ์ ํŠธ ํด๋” ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค. my-project/ ๊ฐ™์€ ๊ณณ์ด์ฃ .
  2. ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด (Staging Area, ๋˜๋Š” Index):
    • ๋ฌผ์งˆ์  ๋น„์œ : ์ฑ…์ƒ ์œ„์—์„œ ์ž‘์—…ํ•œ ๊ฒฐ๊ณผ๋ฌผ ์ค‘, ๋‹ค์Œ๋ฒˆ ๊ณต์‹ ๊ธฐ๋ก(์ปค๋ฐ‹)์— ํฌํ•จ์‹œํ‚ฌ ๊ฒƒ๋“ค๋งŒ ๊ณจ๋ผ ์˜ฌ๋ ค๋‘๋Š” '๋ฐœํ‘œ ์ค€๋น„๋Œ€'์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ๊บผ๋ฒˆ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์„ ๋ณ„ํ•˜๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
    • ์‹ค์ฒด: .git ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ index ํŒŒ์ผ์— ์ด ์ •๋ณด๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํŒŒ์ผ์˜ ์–ด๋–ค ๋‚ด์šฉ์ด ๋‹ค์Œ ์ปค๋ฐ‹์— ํฌํ•จ๋ ์ง€ ๋ช…์‹œํ•˜๋Š” ๋ชฉ๋ก๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  3. ๋กœ์ปฌ ์ €์žฅ์†Œ (Local Repository):
    • ๋ฌผ์งˆ์  ๋น„์œ : ์‚ฌ์šฉ์ž๋‹˜ ๊ฐœ์ธ ์„œ์žฌ์˜ 'ํ”„๋กœ์ ํŠธ ์—ญ์‚ฌ ๊ธฐ๋ก ๋ณด๊ด€ํ•จ'์ž…๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์—์„œ ์ค€๋น„๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ๋ฒ„์ „๋ณ„๋กœ ์ฐจ๊ณก์ฐจ๊ณก ์Šค๋ƒ…์ƒท ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฒ„์ „ ํžˆ์Šคํ† ๋ฆฌ์™€ ๋ธŒ๋žœ์น˜ ์ •๋ณด ๋“ฑ์ด ์ด๊ณณ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค.
    • ์‹ค์ฒด: ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํด๋” ๋‚ด์˜ ์ˆจ๊ฒจ์ง„ .git ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ์•ˆ์—๋Š” ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์‹ค์ œ ํŒŒ์ผ ๋ณ€๊ฒฝ ๋‚ด์šฉ๋“ค), ์ฐธ์กฐ(๋ธŒ๋žœ์น˜, ํƒœ๊ทธ ํฌ์ธํ„ฐ), ์„ค์ • ํŒŒ์ผ ๋“ฑ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์›๊ฒฉ ์ €์žฅ์†Œ (Remote Repository):
    • ๋ฌผ์งˆ์  ๋น„์œ : ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” '์ค‘์•™ ๋„์„œ๊ด€์˜ ํ”„๋กœ์ ํŠธ ์„œ๊ณ '์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ž‘์—…์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ GitHub, GitLab, Bitbucket ๊ฐ™์€ ์„œ๋น„์Šค์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹ค์ฒด:๋„คํŠธ์›Œํฌ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ Git ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

 


๊ธฐ๋ณธ ๋ช…๋ น์–ด

์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ git init

mkdir my-awesome-project  # ํ”„๋กœ์ ํŠธ ํด๋” ์ƒ์„ฑ
cd my-awesome-project     # ํด๋”๋กœ ์ด๋™
git init                  # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Git ์ €์žฅ์†Œ๋กœ ์ดˆ๊ธฐํ™”
 

๊ธฐ์กด ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ git clone

git clone https://github.com/some-user/their-awesome-project.git
 

๋ณ€๊ฒฝ ์ƒํƒœ ํ™•์ธ git status

 

์ปค๋ฐ‹ํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์„ ๋ณ„ : ์Šคํ…Œ์ด์ง• ๊ตฌ์—ญ์œผ๋กœ ์ด๋™ git add

git add main.py          # main.py ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์Šคํ…Œ์ด์ง•
git add utils.py         # utils.py ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ถ”์ ํ•˜๊ณ  ์Šคํ…Œ์ด์ง•
# ๋˜๋Š”
git add .                # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ(์ˆ˜์ •, ์ƒˆ ํŒŒ์ผ)์„ ์Šคํ…Œ์ด์ง•
 

๋กœ์ปฌ ์ €์žฅ์†Œ์— ๊ธฐ๋ก git commit

git commit -m "Add feature X and utility functions"
 

์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ git branch ๋ธŒ๋žœ์น˜์ด๋ฆ„

git branch feature/new-login  # 'feature/new-login'์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
 

๋ธŒ๋žœ์น˜ ์ „ํ™˜ git switch ๋ธŒ๋žœ์น˜๋ช…

git checkout feature/new-login
# ๋˜๋Š” (๋” ์ตœ์‹ , ๋ช…ํ™•ํ•œ ๋ช…๋ น์–ด)
git switch feature/new-login
 

์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ๋“ค์ด feature/new-login ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค

 

์ฃผ ๋ธŒ๋žœ์น˜๋กœ ๋ณต๊ท€ ๋ฐ ๋ณ‘ํ•ฉ ์ค€๋น„ (main์œผ๋กœ ๋Œ์•„์™€์„œ ํ•ฉ์นจ)

git switch main  # main ๋ธŒ๋žœ์น˜๋กœ ์ „ํ™˜
 

๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ git merge ๋ณ‘ํ•ฉํ• ๋ธŒ๋žœ์น˜๋ช…

git merge feature/new-login
 
  • Fast-forward merge: main ๋ธŒ๋žœ์น˜๊ฐ€ feature/new-login ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๊ธฐํ•œ ์ดํ›„๋กœ ์•„๋ฌด๋Ÿฐ ์ถ”๊ฐ€ ์ปค๋ฐ‹์ด ์—†์—ˆ๋‹ค๋ฉด, main ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๋Š” ๋‹จ์ˆœํžˆ feature/new-login ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ "๋นจ๋ฆฌ ๊ฐ๊ธฐ"์ฒ˜๋Ÿผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•˜๊ฒŒ ์ง์„ ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.
  • 3-way merge (Merge commit): main ๋ธŒ๋žœ์น˜์—๋„ ๊ทธ๋™์•ˆ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์—ˆ๋‹ค๋ฉด (๋‹ค๋ฅธ ์ปค๋ฐ‹์ด ์กด์žฌ), Git์€ ๋‘ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•ฉ์นœ ์ƒˆ๋กœ์šด **๋จธ์ง€ ์ปค๋ฐ‹(merge commit)**์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋จธ์ง€ ์ปค๋ฐ‹์€ ๋‘ ๊ฐœ์˜ ๋ถ€๋ชจ ์ปค๋ฐ‹(ํ•˜๋‚˜๋Š” main์˜ ์ตœ์‹  ์ปค๋ฐ‹, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” feature/new-login์˜ ์ตœ์‹  ์ปค๋ฐ‹)์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. main ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๋Š” ์ด ์ƒˆ๋กœ์šด ๋จธ์ง€ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํžˆ์Šคํ† ๋ฆฌ์— ๊ฐ€์ง€๊ฐ€ ํ•ฉ์ณ์ง€๋Š” ๋ชจ์–‘์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ (Conflict): ๋งŒ์•ฝ main ๋ธŒ๋žœ์น˜์™€ feature/new-login ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๊ฐ™์€ ๋ถ€๋ถ„์„ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด, Git์€ ์ž๋™์œผ๋กœ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†์–ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌผ์งˆ์  ๋ณ€ํ™”: ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ์—๋Š” <<<<<<<, =======, >>>>>>> ๊ฐ™์€ ๋งˆ์ปค๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ด ํŒŒ์ผ์„ ์ง์ ‘ ์—ด์–ด ์ถฉ๋Œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•œ ํ›„, ๋‹ค์‹œ git add [์ถฉ๋Œ๋‚œ_ํŒŒ์ผ] -> git commit (์ด๋•Œ -m ์˜ต์…˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด Git์ด ๊ธฐ๋ณธ ๋จธ์ง€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ์•ˆ)์„ ํ†ตํ•ด ๋ณ‘ํ•ฉ์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ธŒ๋žœ์น˜ ์‚ญ์ œ git branch -d ๋ธŒ๋žœ์น˜ ์ด๋ฆ„

git branch -d feature/new-login  # ๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
# ๊ฐ•์ œ ์‚ญ์ œ (๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์–ด๋„ ์‚ญ์ œ): git branch -D feature/wip-branch
 

์›๊ฒฉ ์ €์žฅ์†Œ์— ๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์—…๋กœ๋“œ git push ๋ณ„์นญ ๋ธŒ๋žœ์น˜๋ช…

git push origin main  # ๋กœ์ปฌ main ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ origin ์›๊ฒฉ ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ
git push origin feature/new-login # ๋กœ์ปฌ feature/new-login ๋ธŒ๋žœ์น˜๋ฅผ origin์— ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ํ‘ธ์‹œ (์›๊ฒฉ์— ํ•ด๋‹น ๋ธŒ๋žœ์น˜๊ฐ€ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ)
 
  • ์ฃผ์˜: ๋งŒ์•ฝ ๋กœ์ปฌ์—์„œ ํ‘ธ์‹œํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜์˜ ์›๊ฒฉ ๋ฒ„์ „์ด ๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ์‚ฌ์ด์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๋ฉด (์ฆ‰, ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ๋‚ด๊ฐ€ ๊ฐ€์ง€์ง€ ์•Š์€ ์ปค๋ฐ‹์ด ์žˆ๋‹ค๋ฉด), ํ‘ธ์‹œ๊ฐ€ ๊ฑฐ๋ถ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (non-fast-forward). ์ด ๊ฒฝ์šฐ ๋จผ์ € git pull์„ ํ†ตํ•ด ์›๊ฒฉ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€ ๋ณ‘ํ•ฉํ•œ ํ›„ ๋‹ค์‹œ ํ‘ธ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ git fetch ๋ณ„์นญ

git fetch origin
 

์ตœ์‹  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์ง€๋งŒ, ์•„์ง ๋‚ด ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ๋ฐ”๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„ ๋•Œ ์‚ฌ์šฉ

 

์›๊ฒฉ ์ €์žฅ์†Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฐ€์ ธ์™€์„œ ๋ณ‘ํ•ฉํ•˜๊ธฐ git pull ๋ณ„์นญ ๋ธŒ๋žœ์น˜๋ช…

git pull origin main  # origin ์›๊ฒฉ ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ ํ˜„์žฌ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ
 

GitHub/GitLab ๋“ฑ ํ”Œ๋žซํผ์—์„œ์˜ ํ˜‘์—… ํ๋ฆ„

  1. ์ฃผ ์ €์žฅ์†Œ(upstream ๋˜๋Š” origin)๋ฅผ ์ž์‹ ์˜ ๊ณ„์ •์œผ๋กœ Forkํ•ฉ๋‹ˆ๋‹ค. (ํ”Œ๋žซํผ ๊ธฐ๋Šฅ)
  2. Forkํ•œ ๊ฐœ์ธ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ๋กœ cloneํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์ˆ˜์ •์„ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค (feature/my-fix).
  4. ์ž‘์—…ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ์ž์‹ ์˜ Fork๋œ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ pushํ•ฉ๋‹ˆ๋‹ค (git push origin feature/my-fix).
  5. GitHub/GitLab ์›น์‚ฌ์ดํŠธ์—์„œ, Forkํ•œ ์ €์žฅ์†Œ์˜ feature/my-fix ๋ธŒ๋žœ์น˜์—์„œ ์›๋ณธ ์ฃผ ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜๋กœ Pull Request (PR) ๋˜๋Š” **Merge Request (MR)**๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  6. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž ๋˜๋Š” ๋‹ค๋ฅธ ํŒ€์›๋“ค์ด PR/MR์„ ๋ณด๊ณ  ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , ์˜๊ฒฌ์„ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  7. ๋ฆฌ๋ทฐ์—์„œ ์ˆ˜์ • ์š”์ฒญ์ด ์žˆ์œผ๋ฉด, ๋กœ์ปฌ feature/my-fix ๋ธŒ๋žœ์น˜์—์„œ ์ถ”๊ฐ€ ์ปค๋ฐ‹์„ ํ•˜๊ณ  ๋‹ค์‹œ pushํ•˜๋ฉด PR/MR์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
  8. ๋ชจ๋“  ๊ฒ€ํ† ๊ฐ€ ๋๋‚˜๊ณ  ์Šน์ธ๋˜๋ฉด, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ PR/MR์„ Mergeํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‹ค์ œ ๋ณ‘ํ•ฉ ์ž‘์—…์€ ํ”Œ๋žซํผ ์„œ๋ฒ„์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  9. ์ดํ›„ ๋กœ์ปฌ main ๋ธŒ๋žœ์น˜๋ฅผ ์›๋ณธ ์ฃผ ์ €์žฅ์†Œ์˜ main๊ณผ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด git pull upstream main (์›๋ณธ ์ฃผ ์ €์žฅ์†Œ๋ฅผ upstream์œผ๋กœ ๋“ฑ๋กํ•ด๋’€๋‹ค๋ฉด) ๋“ฑ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 


๊ธฐํƒ€ ์œ ์šฉํ•œ ๋„๊ตฌ๋“ค (๋ฌผ์งˆ์  ๊ด€์ )

  • .gitignore ํŒŒ์ผ:
    • ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ด ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ œ์™ธํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ ํŒจํ„ด(์˜ˆ: *.log, build/, .env)์„ ์ ์–ด๋‘๋ฉด, git add . ์‹คํ–‰ ์‹œ Git์ด ์ด ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ๋“ค์„ "๋ชป ๋ณธ ์ฒ™" ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • git log --graph --oneline --decorate --all:
    • ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ์™€ ํ•จ๊ป˜ ํ•œ ์ค„๋กœ ๊น”๋”ํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๋“ค์ด ์–ด๋–ป๊ฒŒ ๊ฐ ์ปค๋ฐ‹๋“ค์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , ์–ด๋–ป๊ฒŒ ๊ฐˆ๋ผ์ง€๊ณ  ํ•ฉ์ณ์กŒ๋Š”์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • git diff:
    • git diff: ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด ๊ฐ„์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ ๋น„๊ต.
    • git diff --staged (๋˜๋Š” git diff --cached): ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์™€ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๊ฐ„์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ ๋น„๊ต.
    • git diff [๋ธŒ๋žœ์น˜1] [๋ธŒ๋žœ์น˜2]: ๋‘ ๋ธŒ๋žœ์น˜ ๊ฐ„์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ์ฐจ์ด ๋น„๊ต.
    • ํŒŒ์ผ ๋‚ด์šฉ์˜ ์–ด๋–ค ์ค„์ด ์ถ”๊ฐ€/์‚ญ์ œ/๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • git stash:
    • ์ƒํ™ฉ: ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…์„ ํ•˜๋˜ ์ค‘, ์•„์ง ์ปค๋ฐ‹ํ•˜๊ธฐ๋Š” ์• ๋งคํ•œ๋ฐ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๊ธ‰ํ•˜๊ฒŒ ์ „ํ™˜ํ•ด์•ผ ํ•  ๋•Œ.
    • ๋ช…๋ น์–ด: git stash save "์ž„์‹œ ์ž‘์—… ๋‚ด์šฉ"
    • ๋ฌผ์งˆ์  ๋ณ€ํ™”: ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ํŠน๋ณ„ํ•œ "์Šคํƒœ์‹œ(stash)"๋ผ๋Š” ์ž„์‹œ ์ €์žฅ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๊ณ , ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ๊นจ๋—ํ•˜๊ฒŒ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค. .git ๋‚ด๋ถ€์— ์ด ์ž„์‹œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์Šคํƒ์ฒ˜๋Ÿผ ์Œ“์ž…๋‹ˆ๋‹ค.
    • ๋‚˜์ค‘์— git stash pop ๋˜๋Š” git stash apply๋กœ ์ €์žฅํ–ˆ๋˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


โœจ git switch vs git checkout: ๋ฌด์—‡์ด ๋‹ค๋ฅผ๊นŒ์š”? โœจ

git switch๋Š” git checkout์ด ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ ์ค‘ ๋ธŒ๋žœ์น˜ ์ „ํ™˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Git 2.23 ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…๋œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

 

1. git checkout์˜ ๊ณผ๊ฑฐ์™€ ํ˜„์žฌ: ๋งŒ๋Šฅ ๋„๊ตฌ์˜ ๋ช…๊ณผ ์•”

git checkout์€ Git์˜ ์—ญ์‚ฌ์™€ ํ•จ๊ป˜ ํ•ด์˜จ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ๋‹ค์–‘ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

  • ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค:
    • ๋ธŒ๋žœ์น˜ ์ „ํ™˜: git checkout <์ด๋™ํ• _๋ธŒ๋žœ์น˜๋ช…> : HEAD ํฌ์ธํ„ฐ๊ฐ€ ์ง€์ •๋œ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ๋˜๊ณ , ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ ์ธ๋ฑ์Šค(์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด)๊ฐ€ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
    • ํŒŒ์ผ ๋ณต์› (์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ): git checkout -- <ํŒŒ์ผ๊ฒฝ๋กœ> : ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŠน์ • ํŒŒ์ผ์„ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹(๋˜๋Š” ์Šคํ…Œ์ด์ง•๋œ) ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
    • ํŒŒ์ผ ๋ณต์› (์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์—์„œ): ๊ณผ๊ฑฐ์—๋Š” git reset HEAD <ํŒŒ์ผ๊ฒฝ๋กœ> ํ›„ git checkout -- <ํŒŒ์ผ๊ฒฝ๋กœ> ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ฐฉ์‹์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ์ด๋™ (Detached HEAD ์ƒํƒœ): git checkout <์ปค๋ฐ‹_ํ•ด์‹œ> ๋˜๋Š” git checkout <ํƒœ๊ทธ๋ช…> : HEAD๊ฐ€ ํŠน์ • ์ปค๋ฐ‹์„ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜์–ด "Detached HEAD" ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ ์ธ๋ฑ์Šค๋Š” ํ•ด๋‹น ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ์˜ ์ปค๋ฐ‹์€ ์–ด๋–ค ๋ธŒ๋žœ์น˜์—๋„ ์†ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ „ํ™˜: git checkout -b <์ƒˆ_๋ธŒ๋žœ์น˜๋ช…> [์‹œ์ž‘์ _์ปค๋ฐ‹/๋ธŒ๋žœ์น˜] : ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฆ‰์‹œ ๊ทธ ๋ธŒ๋žœ์น˜๋กœ HEAD๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ์ : ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋งฅ๋ฝ์—์„œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์—ฌ, ํŠนํžˆ ์ดˆ๋ณด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์ฃผ๊ฑฐ๋‚˜ ์˜๋„์น˜ ์•Š์€ ์‹ค์ˆ˜๋ฅผ ์œ ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ํŒŒ์ผ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ, Git์€ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  --๋ฅผ ์‚ฌ์šฉํ•ด ํŒŒ์ผ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์ง€๋งŒ์š”.)

 

2. git switch์˜ ๋“ฑ์žฅ: ๋ช…ํ™•์„ฑ์„ ์œ„ํ•œ ๋ถ„๋ฆฌ

์ด๋Ÿฌํ•œ ํ˜ผ๋ž€์„ ์ค„์ด๊ณ ์ž Git ๊ฐœ๋ฐœํŒ€์€ git checkout์˜ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋” ์ง๊ด€์ ์ธ ์ƒˆ ๋ช…๋ น์–ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ git switch์ž…๋‹ˆ๋‹ค.

 

    • ์ฃผ์š” ๋ชฉ์ : ์˜ค์ง **๋ธŒ๋žœ์น˜์™€ ๊ด€๋ จ๋œ ์ž‘์—…(์ƒ์„ฑ, ์ „ํ™˜)**์—๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค:
      • ๋ธŒ๋žœ์น˜ ์ „ํ™˜: git switch <์ด๋™ํ• _๋ธŒ๋žœ์น˜๋ช…>
        • ๋ฌผ์งˆ์  ๋ณ€ํ™”: git checkout <๋ธŒ๋žœ์น˜๋ช…>๊ณผ ๋™์ผํ•˜๊ฒŒ HEAD ์ด๋™, ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ/์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ.
        • ์•ˆ์ „์žฅ์น˜: ๋งŒ์•ฝ ์ „ํ™˜ํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ฐฉ๊ฐํ•˜์—ฌ ํŒŒ์ผ์„ ๋ณต์›ํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ๋ช…ํ™•ํžˆ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
      • ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ „ํ™˜: git switch -c <์ƒˆ_๋ธŒ๋žœ์น˜๋ช…> ๋˜๋Š” git switch --create <์ƒˆ_๋ธŒ๋žœ์น˜๋ช…> [์‹œ์ž‘์ _์ปค๋ฐ‹/๋ธŒ๋žœ์น˜]
        • git checkout -b์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์˜ต์…˜ ์ด๋ฆ„(-c, --create)์ด ๋” ๋ช…์‹œ์ ์ž…๋‹ˆ๋‹ค.
      • ์ด์ „ ๋ธŒ๋žœ์น˜๋กœ ๋น ๋ฅด๊ฒŒ ์ „ํ™˜: git switch -
        • git checkout - ์™€ ๋™์ผํ•˜๊ฒŒ, ๋ฐ”๋กœ ์ด์ „์— ์ž‘์—…ํ•˜๋˜ ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
      • Detached HEAD ์ƒํƒœ๋กœ ์ „ํ™˜ (๋ช…์‹œ์ ): git switch --detach <์ปค๋ฐ‹_ํ•ด์‹œ_๋˜๋Š”_ํƒœ๊ทธ๋ช…>
        • git checkout <์ปค๋ฐ‹_ํ•ด์‹œ>์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, --detach ์˜ต์…˜์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค.
      • ๊ฐ•์ œ ์ „ํ™˜ (๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฌด์‹œ): git switch -f <๋ธŒ๋žœ์น˜๋ช…> ๋˜๋Š” git switch --force <๋ธŒ๋žœ์น˜๋ช…> (์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉ!)
        • ์ด ๊ธฐ๋Šฅ์€ git checkout -f ์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋”๋ผ๋„ ๊ฐ•์ œ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ „ํ™˜ํ•˜๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜)

 

3. git restore์˜ ๋“ฑ์žฅ: ํŒŒ์ผ ๋ณต์›์˜ ๋ช…ํ™•ํ™”

git switch์™€ ํ•จ๊ป˜ ๋“ฑ์žฅํ•œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๋ช…๋ น์–ด๋Š” git restore์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” git checkout์ด ๋‹ด๋‹นํ•˜๋˜ "ํŒŒ์ผ ๋ณต์›" ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

 

    • ์ฃผ์š” ๋ชฉ์ : ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜, ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์—์„œ ํŒŒ์ผ์„ ๋‚ด๋ฆฌ๋Š”(unstage) ์ž‘์—…์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค:
      • ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ ํŒŒ์ผ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋˜๋Œ๋ฆฌ๊ธฐ: git restore <ํŒŒ์ผ๊ฒฝ๋กœ>
        • git checkout -- <ํŒŒ์ผ๊ฒฝ๋กœ>์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๋˜๋Š” ์Šคํ…Œ์ด์ง•๋œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
      • ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ ๋‚ด๋ฆฌ๊ธฐ (Unstage): git restore --staged <ํŒŒ์ผ๊ฒฝ๋กœ>
        • git reset HEAD <ํŒŒ์ผ๊ฒฝ๋กœ>์™€ ๋™์ผํ•œ ํšจ๊ณผ์ž…๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง• ์—์–ด๋ฆฌ์–ด์—์„œ ํŒŒ์ผ์„ ๋‚ด๋ฆฌ๊ณ , ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

 

4. ํ•ต์‹ฌ ์ฐจ์ด์  ์š”์•ฝ

๋Œ€ํ‘œ์‚ฌ์ง„ ์‚ญ์ œ

์‚ฌ์ง„ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜์„ธ์š”.

5. ๊ถŒ์žฅ ์‚ฌ์šฉ๋ฒ•

    • ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ „ํ™˜ํ•  ๋•Œ๋Š” git switch๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
    • ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜ ์Šคํ…Œ์ด์ง•์„ ์ทจ์†Œํ•  ๋•Œ๋Š” git restore๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
    • git checkout์€ ์—ฌ์ „ํžˆ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋“ค์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ช…๋ น์–ด์˜ ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ์ „๋ฌธ ๊ณต๊ตฌ๊ฐ€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์–ด์„คํ”„๊ฒŒ ํ•˜๋Š” ๋งŒ๋Šฅ ๊ณต๊ตฌ๋ณด๋‹ค ํŠน์ • ์ž‘์—…์— ๋” ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.