๐Ÿ”€ Git ๋ธŒ๋žœ์น˜ ์ „๋žต & ๋ช…๋ น์–ด ๋งค๋‰ด์–ผ ์ด์ •๋ฆฌ

Sueยท2025๋…„ 8์›” 26์ผ
0
post-thumbnail

๐Ÿ”€ Git ๋ธŒ๋žœ์น˜ ์ „๋žต & ๋ช…๋ น์–ด ๋งค๋‰ด์–ผ

์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” ํ๋ฆ„๋Œ€๋กœ, ๊ฐœ๋…โ†’๋ช…๋ น์–ดโ†’์ฃผ์˜์ โ†’๋ณต๊ตฌ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. ์‹œ์ž‘ ์ค€๋น„ โ€“ ์‚ฌ์šฉ์ž ์ •๋ณด, ํŽธ์ง‘๊ธฐ, ์ค„๋ฐ”๊ฟˆ
  2. ์ €์žฅ์†Œ์™€ ์›๊ฒฉ โ€“ clone, remote, fetch vs pull, tracking
  3. ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ/์ด๋™ โ€“ ์•ˆ์ „ํ•œ ํŒŒ์ƒ ๊ทœ์น™
  4. ํ•˜๋ฃจ ์—…๋ฌด ํ๋ฆ„(๊ถŒ์žฅ ๋ฃจํ‹ด) โ€“ ๋ฒˆํ˜ธ ์ˆœ์„œ ์ „์ฒด ๋ช…๋ น์–ด
  5. Merge vs Rebase โ€“ ๊ฐœ๋…/๊ทธ๋ฆผ/์–ธ์ œ/์ฃผ์˜์ /๋ช…๋ น์–ด
  6. ๋‚ด ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•(merge/rebase/์ƒˆ๋กœํŒŒ์ƒ)
  7. ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ โ€“ ๋ณ‘ํ•ฉ/๋ฆฌ๋ฒ ์ด์Šค/์ค‘๋‹จยท์žฌ์‹œ๋„
  8. Stash(์ž„์‹œ์ €์žฅ) โ€“ ์‹ค๋ฌด์—์„œ ์“ฐ๋Š” ๋ชจ๋“  ํŒจํ„ด
  9. ์ปค๋ฐ‹ ๊ด€๋ฆฌ โ€“ Conventional Commits, amend, squash/fixup
  10. ๋˜๋Œ๋ฆฌ๊ธฐ & ๋ณต๊ตฌ โ€“ revert/reset/restore/reflog/force-with-lease
  11. .gitignore ์ œ๋Œ€๋กœ โ€“ ์ด๋ฏธ ์ถ”์ ๋œ ํŒŒ์ผ ์ œ์™ธํ•˜๊ธฐ
  12. PR(์ฝ”๋“œ ๋ฆฌ๋ทฐ) ํ๋ฆ„ โ€“ push, ๋ฆฌ๋ทฐ, ๋จธ์ง€ ์ „๋žต
  13. ์ž์ฃผ ๊ฒช๋Š” ์˜ค๋ฅ˜/์ƒํ™ฉ๋ณ„ ์ฒ˜๋ฐฉ์ „ โ€“ ๋‹น์‹ ์˜ ์ฝ˜์†” ๋ฉ”์‹œ์ง€ ํ•ด๊ฒฐ์ง‘
  14. ์น˜ํŠธ์‹œํŠธ(์ž‘์—…โ†’๋ช…๋ น์–ด ๋งคํ•‘ ํ‘œ)

1) ์‹œ์ž‘ ์ค€๋น„ โ€“ ์‚ฌ์šฉ์ž ์ •๋ณด, ํŽธ์ง‘๊ธฐ, ์ค„๋ฐ”๊ฟˆ

  • ์‚ฌ์šฉ์ž/๋ฉ”์ผ(์ปค๋ฐ‹ ์„œ๋ช…์ž)
git config --global user.name "ํ™๊ธธ๋™"
git config --global user.email "me@example.com"
  • ๊ธฐ๋ณธ ํŽธ์ง‘๊ธฐ(์˜ต์…˜)
git config --global core.editor "code --wait"      # VS Code
  • ์ค„๋ฐ”๊ฟˆ(ํŒ€ ๊ทœ์น™์— ๋งž๊ฒŒ)
git config --global core.autocrlf input            # macOS/Linux ๊ถŒ์žฅ
git config --global core.autocrlf true             # Windows ํ˜ผ์ž ๊ฐœ๋ฐœ ์‹œ
  • ์ƒํƒœ/์ตœ๊ทผ ๊ธฐ๋ก/์›๊ฒฉ ํ™•์ธ
git status
git log --oneline --graph --decorate -20
git remote -v

2) ์ €์žฅ์†Œ์™€ ์›๊ฒฉ โ€“ clone, remote, fetch vs pull, tracking

  • ํด๋ก 
git clone <url>
cd <repo>
  • ์›๊ฒฉ/๋ธŒ๋žœ์น˜ ์ถ”์ (Tracking)
git branch -vv                    # ํ˜„์žฌ ๋ธŒ๋žœ์น˜๊ฐ€ ์–ด๋–ค ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”์ ํ•˜๋Š”์ง€
git push -u origin feature/x      # ์ตœ์ดˆ ํ‘ธ์‹œ ์‹œ -u๋กœ ์ถ”์  ์„ค์ •
  • fetch vs pull

    • fetch: โ€œ์›๊ฒฉ ์ •๋ณด๋งŒ ๊ฐฑ์‹ (๋ณ‘ํ•ฉ/๋ฆฌ๋ฒ ์ด์Šค X)โ€
    • pull: โ€œfetch + ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜(merge ๋˜๋Š” rebase)โ€
git fetch origin
git pull --ff-only                 # ์‹ค์ˆ˜๋กœ merge commit ์ƒ๊ธฐ๋Š” ๊ฒƒ ๋ฐฉ์ง€
# ๋˜๋Š”
git pull --rebase --autostash      # ๊ฐœ์ธ ๋ธŒ๋žœ์น˜์—์„œ ๊น”๋”ํžˆ ์ตœ์‹ ํ™”ํ•  ๋•Œ

3) ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ/์ด๋™ โ€“ ์•ˆ์ „ํ•œ ํŒŒ์ƒ ๊ทœ์น™

  • ์ตœ์‹  development์—์„œ ๋ฐ”๋กœ ํŒŒ์ƒ(๊ถŒ์žฅ)
git fetch origin
git switch development
git pull --ff-only origin development
git switch -c feature/login       # development ์ตœ์‹  ์ปค๋ฐ‹์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜
  • ๊ธฐ์กด ๋ธŒ๋žœ์น˜๋กœ ์ด๋™(๊ตฌ๋ฌธ 2์ข…)
git switch feature/login
# (๊ตฌ์‹) git checkout feature/login
  • ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ(๊ถŒ์žฅ)

    • feature/๊ธฐ๋Šฅ-์„ค๋ช…
    • bugfix/์ด์Šˆ-์„ค๋ช…
    • hotfix/๊ธด๊ธ‰-์„ค๋ช…

4) ํ•˜๋ฃจ ์—…๋ฌด ํ๋ฆ„(๊ถŒ์žฅ ๋ฃจํ‹ด)

  1. ์›๊ฒฉ ์ตœ์‹  ํ™•์ธ
git fetch origin
git switch development
git pull --ff-only origin development
  1. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ/์ด๋™
git switch -c feature/awesome
# (์ด๋ฏธ ๋งŒ๋“  ๊ฒฝ์šฐ) git switch feature/awesome
  1. ์ž‘์—… โ†’ ์ƒํƒœ ํ™•์ธ โ†’ ์Šคํ…Œ์ด์ง• โ†’ ์ปค๋ฐ‹
git status
git add -A
git commit -m "feat(awesome): ์ดˆ๊ธฐ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€"
  1. ์ค‘๊ฐ„์ค‘๊ฐ„ ์ตœ์‹ ํ™” ๋ฐ˜์˜(์•„๋ž˜ 6์žฅ ์ฐธ๊ณ : merge ๋˜๋Š” rebase)
  2. ์›๊ฒฉ์— ํ‘ธ์‹œ(+์ถ”์  ์„ค์ •)
git push -u origin feature/awesome
  1. PR ์ƒ์„ฑ โ†’ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ โ†’ ์Šค์ฟผ์‹œ/๋จธ์ง€ ์ „๋žต ์„ ํƒ(12์žฅ ์ฐธ๊ณ )

5) Merge vs Rebase โ€“ ํ•ต์‹ฌ ๋น„๊ต

๊ฐœ๋… ๊ทธ๋ฆผ

development: A -- B -- C -- D

feature/app: E -- F

Merge(๋จธ์ง€)

git switch feature/app
git merge development

๊ฒฐ๊ณผ(merge commit M ์ƒ์„ฑ)
A -- B -- C -- D ----------- M
\ /
E--F

  • ์žฅ์ : ์•ˆ์ „, ๊ณต๋™ ์ž‘์—…์— ์ ํ•ฉ, ์›๋ณธ ํžˆ์Šคํ† ๋ฆฌ ๋ณด์กด
  • ๋‹จ์ : ๋จธ์ง€ ์ปค๋ฐ‹์ด ๋ˆ„์ ๋˜๋ฉด ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ณต์žก

์˜ต์…˜:

git merge --no-ff --no-edit development   # merge commit์„ ํ•ญ์ƒ ๋‚จ๊น€

Rebase(๋ฆฌ๋ฒ ์ด์Šค)

git switch feature/app
git rebase development

๊ฒฐ๊ณผ(์ง์„ ํ˜•)
A -- B -- C -- D -- E' -- F'

  • ์žฅ์ : ํžˆ์Šคํ† ๋ฆฌ ๊น”๋”(์ฝ๊ธฐ ์‰ฌ์›€)
  • ๋‹จ์ : ๊ณต์œ  ๋ธŒ๋žœ์น˜์—์„œ ๊ธˆ์ง€(ํžˆ์Šคํ† ๋ฆฌ ์žฌ์ž‘์„ฑ); ์ถฉ๋Œ์„ ์ปค๋ฐ‹๋งˆ๋‹ค ํ•ด๊ฒฐ

๋ฆฌ๋ฒ ์ด์Šค ์ค‘ ์œ ์šฉํ•œ ๋ช…๋ น:

git rebase --continue
git rebase --skip
git rebase --abort

์–ธ์ œ ๋ฌด์—‡์„?

  • ํŒ€ ๊ณต์šฉ ๋ธŒ๋žœ์น˜(main/development): Merge ๊ถŒ์žฅ
  • ๊ฐœ์ธ ์ž‘์—… ๋ธŒ๋žœ์น˜(PR ์ „ ์ •๋ฆฌ): Rebase ์ž์ฃผ ์‚ฌ์šฉ
  • ์›๊ฒฉ์— ์ด๋ฏธ ๊ณต์œ ๋œ ๋ธŒ๋žœ์น˜๋ฅผ rebase โ†’ ์œ„ํ—˜. ๊ผญ ํ•„์š”ํ•˜๋ฉด ํ˜‘์˜ ํ›„ --force-with-lease

ํ•œ๋ˆˆ ๋น„๊ต

ํ•ญ๋ชฉmergerebase
ํžˆ์Šคํ† ๋ฆฌ๋ถ„๊ธฐ+๋จธ์ง€ ์ปค๋ฐ‹ ๋‚จ๊น€์ง์„ ํ™”(๊น”๋”)
์•ˆ์ „์„ฑ๋†’์Œ(๊ณต์œ ์— ์ ํ•ฉ)๋‚ฎ์Œ(๊ณต์œ  ๊ธˆ์ง€)
์ถฉ๋Œ ์ฒ˜๋ฆฌํ•œ ๋ฒˆ์—์ปค๋ฐ‹๋งˆ๋‹ค
์‚ฌ์šฉ ๋งฅ๋ฝํŒ€/๊ณต์œ ๊ฐœ์ธ/PR ์ „

6) ๋‚ด ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์ „์ œ: ํ•ญ์ƒ ๋จผ์ € development๋ฅผ ์ตœ์‹ ์œผ๋กœ

git fetch origin
git switch development
git pull --ff-only origin development

๋ฐฉ๋ฒ• A) ๋‚ด ๋ธŒ๋žœ์น˜์—์„œ development๋ฅผ ๋จธ์ง€(์•ˆ์ „, ๊ถŒ์žฅ)

git switch feature/awesome
git merge development
# ์ถฉ๋Œ ์‹œ ํ•ด๊ฒฐ โ†’ git add -A โ†’ git commit

๋ฐฉ๋ฒ• B) ๋‚ด ๋ธŒ๋žœ์น˜๋ฅผ development ์œ„๋กœ ๋ฆฌ๋ฒ ์ด์Šค(ํžˆ์Šคํ† ๋ฆฌ ๊น”๋”)

git switch feature/awesome
git rebase development
# ์ถฉ๋Œ ์‹œ ํ•ด๊ฒฐ โ†’ git add -A โ†’ git rebase --continue

๋ฐฉ๋ฒ• C) ์•„์˜ˆ ์ตœ์‹  development์—์„œ ์ƒˆ๋กœ ํŒŒ์ƒ(ํžˆ์Šคํ† ๋ฆฌ ๊ฐ€์žฅ ๊น”๋”)

git switch development
git pull --ff-only origin development
git switch -c feature/awesome-v2
# ํ•„์š” ์ปค๋ฐ‹๋งŒ cherry-pick
git cherry-pick <E> <F> ...

์ด๋ฏธ ๋งŒ๋“ค์–ด๋‘” ๋ธŒ๋žœ์น˜์— development ์ตœ์‹ ์„ ํ•ฉ์น  ๋•Œโ€๋Š”

git checkout {new\_branch} && git merge development

๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋‹จ, ํ•ญ์ƒ ๊ทธ ์ „์— development๋ฅผ ์›๊ฒฉ๊ณผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•จ.


7) ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ

๊ณตํ†ต

  • ์ถฉ๋Œ ํŒŒ์ผ์— <<<<<<<, =======, >>>>>>> ๋งˆ์ปค ๋“ฑ์žฅ
  • ์›ํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ •๋ฆฌ ํ›„ ์ €์žฅ
  • ์Šคํ…Œ์ด์ง•ํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰

๋จธ์ง€ ์ค‘

git merge development
# ์ถฉ๋Œ ํ•ด๊ฒฐ
git add -A
git commit
# ์ค‘๋‹จํ•˜๋ ค๋ฉด: git merge --abort

๋ฆฌ๋ฒ ์ด์Šค ์ค‘

git rebase development
# ์ถฉ๋Œ ํ•ด๊ฒฐ
git add -A
git rebase --continue
# ์ „์ฒด ์ค‘๋‹จ: git rebase --abort

ํŒ

  • ํŒŒ์ผ๋ณ„๋กœ ์ˆœ์ฐจ ํ•ด๊ฒฐ: git add <file> ๋ฐ˜๋ณต
  • ์ถฉ๋Œ ๋ณด๊ธฐ: git status, git diff, ์—๋””ํ„ฐ ๋‚ด Conflict View ํ™œ์šฉ
  • ํ…Œ์ŠคํŠธ/๋นŒ๋“œ ํ†ต๊ณผ ํ™•์ธ ํ›„ ์ปค๋ฐ‹

8) Stash(์ž„์‹œ์ €์žฅ) โ€“ ์‹ค๋ฌด ํŒจํ„ด

๊ธฐ๋ณธ

git stash                 # ์ถ”์  ํŒŒ์ผ ๋ณ€๊ฒฝ๋งŒ
git stash -u              # untracked(์ƒˆ ํŒŒ์ผ)๋„ ํฌํ•จ
git stash -a              # .gitignore๊นŒ์ง€ ํฌํ•จ(์ฃผ์˜)
git stash list
git stash show -p stash@{0}
git stash apply stash@{0} # ์ ์šฉ(์Šคํƒ์— ๋‚จ๊น€)
git stash pop             # ์ ์šฉ+์Šคํƒ์—์„œ ์ œ๊ฑฐ

๋ถ€๋ถ„ ์ ์šฉ(๋Œ€ํ™”ํ˜•)

git stash -p

์ธ๋ฑ์Šค ์œ ์ง€/๋ฉ”์‹œ์ง€

git stash --keep-index
git stash push -m "WIP: ๋กœ๊ทธ์ธ ํผ"

9) ์ปค๋ฐ‹ ๊ด€๋ฆฌ โ€“ ์ข‹์€ ๋ฉ”์‹œ์ง€์™€ ์ •๋ฆฌ

Conventional Commits(์ถ”์ฒœ)

  • ํƒ€์ž…: feat, fix, docs, style, refactor, test, chore, build, ci, perf
  • ํ˜•์‹: type(scope): ๋ฉ”์‹œ์ง€
  • ์˜ˆ:
feat(auth): ๋กœ๊ทธ์ธ ํผ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ถ”๊ฐ€
fix(api): 400 ์‘๋‹ต ์‹œ ์—๋Ÿฌ์ฝ”๋“œ ํŒŒ์‹ฑ ๋ฒ„๊ทธ ์ˆ˜์ •
docs(readme): ์„ค์น˜ ๋ฐฉ๋ฒ• ๊ฐฑ์‹ 

์ปค๋ฐ‹ ์ˆ˜์ •

git commit --amend                 # ์ง์ „ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€/๋‚ด์šฉ ์ˆ˜์ •

ํžˆ์Šคํ† ๋ฆฌ ์ •๋ฆฌ(์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค)

git rebase -i HEAD~5
# pick โ†’ squash/fixup ๋กœ ๋ฌถ๊ธฐ
# autosquash
git commit --fixup <commit>
git rebase -i --autosquash HEAD~5

10) ๋˜๋Œ๋ฆฌ๊ธฐ & ๋ณต๊ตฌ

์•ˆ์ „ํ•˜๊ฒŒ ๋˜๋Œ๋ฆฌ๊ธฐ(๊ณต์œ  ๋ธŒ๋žœ์น˜ OK)

git revert <commit>                # ๋ฐ˜๋Œ€ ๋ณ€๊ฒฝ ์ปค๋ฐ‹ ์ƒ์„ฑ

ํžˆ์Šคํ† ๋ฆฌ ์ž์ฒด๋ฅผ ์ด๋™(๊ณต์œ  ๋ธŒ๋žœ์น˜ X)

git reset --soft <commit>          # ์ธ๋ฑ์Šค/์›ŒํฌํŠธ๋ฆฌ ์œ ์ง€
git reset --mixed <commit>         # ๊ธฐ๋ณธ, ์ธ๋ฑ์Šค ํ•ด์ œ
git reset --hard <commit>          # ์ „๋ถ€ ๋˜๋Œ๋ฆผ(์ฃผ์˜)

ํŒŒ์ผ ๋‹จ์œ„ ๋ณต์›(์ƒˆ Git)

git restore <path>                 # ์›ŒํฌํŠธ๋ฆฌ๋งŒ ๋ณต์›
git restore --staged <path>        # ์Šคํ…Œ์ด์ง• ํ•ด์ œ

๋งˆ์ง€๋ง‰ ์•ˆ์ „๋ง โ€“ reflog

git reflog                         # ๋ธŒ๋žœ์น˜ ์ด๋™/๋ฆฌ์…‹/๋ฆฌ๋ฒ ์ด์Šค ์ด๋ ฅ
git reset --hard <reflog-id>       # ๊ณผ๊ฑฐ ์ง€์ ์œผ๋กœ ๋ณต์›

์›๊ฒฉ ๋ฎ์–ด์“ฐ๊ธฐ(๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ)

git push --force-with-lease        # ๋‚ด ๋ณ€๊ฒฝ๋งŒ ๋ฎ๋„๋ก ์•ˆ์ „์žฅ์น˜

11) .gitignore ์ œ๋Œ€๋กœ โ€“ ์ด๋ฏธ ์ถ”์ ๋œ ํŒŒ์ผ ์ œ์™ธ

  1. .gitignore์— ํŒจํ„ด ์ถ”๊ฐ€
  2. ์ธ๋ฑ์Šค์—์„œ๋งŒ ์ œ๊ฑฐ(ํŒŒ์ผ์€ ๋‚จ๊น€)
git rm --cached -r path/or/file
git commit -m "chore: ignore ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ"
git push

์ „์—ญ ignore(๊ฐœ์ธ ํ™˜๊ฒฝ ํŒŒ์ผ)

git config --global core.excludesfile ~/.gitignore_global

12) PR(์ฝ”๋“œ ๋ฆฌ๋ทฐ) ํ๋ฆ„

  1. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ
git push -u origin feature/awesome
  1. PR ์ƒ์„ฑ(๋ฒ ์ด์Šค: development ๋˜๋Š” main)

  2. ๋ฆฌ๋ทฐ ๋ฐ˜์˜ โ†’ ์ถ”๊ฐ€ ์ปค๋ฐ‹ ํ‘ธ์‹œ

  3. ๋ณ‘ํ•ฉ ์ „๋žต

    • Squash Merge: PR ์ปค๋ฐ‹๋“ค์„ 1๊ฐœ๋กœ. ํžˆ์Šคํ† ๋ฆฌ ๊นจ๋—
    • Merge Commit: ๋จธ์ง€ ์ปค๋ฐ‹ ๋‚จ๊น€. ๊ธฐ๋ก ์ถฉ์‹ค
    • Rebase & Merge: ์ง์„ ํ™”ํ•˜๋˜, ๊ณต์œ  ์ •์ฑ…์— ๋งž์ถฐ ์‹ ์ค‘ํžˆ
  4. ๋จธ์ง€ ํ›„ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ

git branch -d feature/awesome
git push origin --delete feature/awesome

13) ์ž์ฃผ ๊ฒช๋Š” ์˜ค๋ฅ˜/์ƒํ™ฉ๋ณ„ ์ฒ˜๋ฐฉ์ „

A) โ€œYour local changes would be overwritten by checkoutโ€

  • ์›์ธ: ๋ฏธ์ปค๋ฐ‹ ๋ณ€๊ฒฝ์ด ์žˆ์–ด์„œ ๋ธŒ๋žœ์น˜ ์ „ํ™˜ ๋ถˆ๊ฐ€
  • ํ•ด๊ฒฐ:
git add -A && git commit -m "wip: ์ €์žฅ"
# ๋˜๋Š”
git stash
git switch ๋‹ค๋ฅธ๋ธŒ๋žœ์น˜
# ๋˜๋Š” ํŠน์ • ํŒŒ์ผ๋งŒ ์ž„์‹œ ๋ฐฑ์—…/์‚ญ์ œ

B) โ€œThe following untracked working tree files would be overwritten by checkoutโ€

  • ์›์ธ: ์ „ํ™˜ํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜์— ๋™์ผ ๊ฒฝ๋กœ ํŒŒ์ผ ์กด์žฌ(๋‚ด ์ชฝ์€ untracked)
  • ํ•ด๊ฒฐ(์„ ํƒ)
git add -A && git commit   # ์ปค๋ฐ‹ ํ›„ ์ „ํ™˜
git stash -u               # untracked ํฌํ•จ ์ž„์‹œ์ €์žฅ
git clean -fd              # ์ง„์งœ ์‚ญ์ œ(์ฃผ์˜)

C) .gitignore ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ์˜ฌ๋ผ๊ฐ

git rm --cached -r path/
git commit -m "chore: stop tracking generated files"
git push

D) development๊ฐ€ โ€œAlready up to dateโ€์ธ๋ฐ ์ตœ์‹ ์ด ์•„๋‹˜

git fetch origin
git switch development
git reset --hard origin/development   # ์›๊ฒฉ ๊ธฐ์ค€์œผ๋กœ ๋”ฑ ๋งž์ถค(์ฃผ์˜)

E) ๋ฆฌ๋ฒ ์ด์Šค ๊ผฌ์˜€์„ ๋•Œ

git rebase --abort
# ๋˜๋Š”
git reflog  # ์ด์ „ ์ƒํƒœ ์ฐพ์•„ ๋ณต๊ตฌ
git reset --hard <reflog-id>

F) ์ž˜๋ชป ํ‘ธ์‹œํ•œ ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ(๊ณต์œ  ๋ธŒ๋žœ์น˜)

git revert <commit>
git push

G) ๊ณผ๊ฑฐ ์‹ค์ˆ˜๋กœ ๋ฏผ๊ฐ์ •๋ณด ํ‘ธ์‹œ(๋น„๋ฐ€๋ฒˆํ˜ธ/ํ‚ค)

  • ์ฆ‰์‹œ ํ‚ค ํ๊ธฐ/๊ต์ฒด โ†’ ์ƒˆ ํ‚ค ๋ฐœ๊ธ‰
  • ๊ธฐ๋ก ์ •๋ฆฌ(BFG Repo-Cleaner ๋“ฑ) + ์ •์ฑ… ๊ณต์ง€

14) ์น˜ํŠธ์‹œํŠธ(์ž‘์—…โ†’๋ช…๋ น์–ด)

๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™”(๊ฐœ์ธ ๋ธŒ๋žœ์น˜์—์„œ ์•ˆ์ „)

  • merge:
    git switch feature/x
    git merge development

  • rebase:
    git switch feature/x
    git rebase development

์ƒˆ ๋ธŒ๋žœ์น˜ ์‹œ์ž‘(ํ•ญ์ƒ ์ตœ์‹  development์—์„œ)

  • git fetch origin
  • git switch development
  • git pull --ff-only origin development
  • git switch -c feature/x

PR ์ „ ์ปค๋ฐ‹ ์ •๋ฆฌ

  • git rebase -i HEAD~N
  • pick โ†’ squash/fixup
  • git push --force-with-lease

๋˜๋Œ๋ฆฌ๊ธฐ(๊ณต์œ  ์•ˆ์ „)

  • git revert

์ด๋ฏธ ์ถ”์  ์ค‘์ธ ํŒŒ์ผ ignore

  • .gitignore ์ถ”๊ฐ€
  • git rm --cached -r path/
  • git commit && git push

๋ธŒ๋žœ์น˜ ์ „ํ™˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

  • git add -A && git commit
  • git stash (-u)
  • git clean -fd (์ฃผ์˜)

๋งˆ์ง€๋ง‰ ๋ณต๊ตฌ๋ง

  • git reflog
  • git reset --hard

์ €๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ตœ์‹  ๋ฒ ์ด์Šค์—์„œ ๋ธŒ๋žœ์น˜ ํŒŒ์ƒ
  2. ์ž‘์€ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹(๋ช…ํ™• ๋ฉ”์‹œ์ง€)
  3. ์ฃผ๊ธฐ์  ์ตœ์‹ ํ™”(merge ๋˜๋Š” rebase ์›์น™ ์œ ์ง€)
  4. PR๋กœ ๊ฒ€ํ† ยท๋ณ‘ํ•ฉ
profile
AI/ML Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€