avatar
Published on

Git Cheat Sheet

Author
  • avatar
    Name
    yceffort

์—ฌ๊ธฐ์ €๊ธฐ ์ž˜ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” Git Cheat Sheet๋ฅผ ๋ชจ์•„์„œ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•ด ๋ณด์•˜๋‹ค. ์ž‘์„ฑ์‹œ []๋Š” ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.

Table of Contents

SETUP

  • git config --global user.name "[firstname lastname]": git์—์„œ ์‚ฌ์šฉํ•  ๊ธ€๋กœ๋ฒŒ ์ด๋ฆ„์„ ์„ค์ •ํ•œ๋‹ค.
  • git config --global user.email "[valid-email]": git์—์„œ ์‚ฌ์šฉํ•  ๊ธ€๋กœ๋ฒŒ ์ด๋ฉ”์ผ์„ ์„ค์ •ํ•œ๋‹ค.
  • git config --global color.ui auto: git ๋ฆฌ๋ทฐ๋ฅผ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปค๋งจ๋“œ๋ผ์ธ์— ์ž๋™์œผ๋กœ ์ƒ‰๊น”์„ ์น ํ•ด์ค€๋‹ค.

SETUP & INIT

  • git init: git repository ์ดˆ๊ธฐํ™”
  • git clone [url]: URL์„ ํ†ตํ•ด์„œ git repository๋ฅผ ํด๋ก ํ•œ๋‹ค.

STAGE & SNAPSHOT

  • git status: ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค.
  • git add [file]: ๋‹ค์Œ ์ปค๋ฐ‹์— ์ถ”๊ฐ€๋  ํŒŒ์ผ (์Šคํ…Œ์ด์ง•ํ• )์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • git reset [file]: ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์Šคํ…Œ์ด์ง• ๋œ ํŒŒ์ผ์„ ๋‹ค์‹œ unstage ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
  • git reset --hard [file]: ์Šคํ…Œ์ด์ง• ์˜์—ญ๊ณผ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹๊ณผ ์ผ์น˜ํ•˜๋„๋ก ๋ฆฌ์…‹ํ•˜๊ณ , ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์—Ž์–ด๋ฒ„๋ฆฐ๋‹ค.
  • git reset [commit]: ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ์ปค๋ฐ‹ID ์ชฝ์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ณ , ๋ชจ๋“  ์Šคํ…Œ์ด์ง•๋˜์–ด ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ์ง€๋งŒ, ์ž‘์—…์ค‘์ธ ๋‚ด์šฉ์€ ๋˜๋Œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • git reset --hard [commit]: ์Šคํ…Œ์ด์ง•์˜์—ญ๊ณผ ์ž‘์—…์ค‘์ธ ์˜์—ญ ๋ชจ๋‘๋ฅผ ๋ฆฌ์…‹ํ•ด ๋ฒ„๋ฆฐ๋‹ค. ์ปค๋ฐ‹๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ๋‚ด์—ญ์€ ๋ชจ๋‘ ๋‚ ๋ผ๊ฐ€๊ณ , commit ์ดํ›„์˜ ๋‚ด์šฉ๋„ ๋ชจ๋‘ ๋‚ ๋ผ๊ฐ„๋‹ค.
  • git diff: ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค ์ค‘์—์„œ diff๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • git diff --staged: ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ๋“ค ์ค‘์—์„œ diff๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • git commit -m "[message]": ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ์„ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • git commit --amend: ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ํ˜„์žฌ ์Šคํ…Œ์ด์ง•๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ๊ฐ€ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๋ณ‘ํ•ฉํ•œ๋‹ค. ์Šคํ…Œ์ด์ง•๊ณผ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋‹จ์ˆœํžˆ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

BRANCH & MERGE

  • git branch: ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค. *์ด ๋– ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋Š” ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ธŒ๋žœ์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • git branch [branch-name]: ํ˜„์žฌ ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.
  • git checkout [branch-name]: ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ ํ•œ๋‹ค์Œ, ํ•ด๋‹น ๋‚ด์šฉ์„ ์ž‘์—…์ค‘์ธ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
  • git merge [branch-name]: ํŠน์ • ๋ธŒ๋žœ์น˜์˜ ์ž‘์—… ๋‚ด์šฉ์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์™€ ๋ณ‘ํ•ฉํ•œ๋‹ค.

INSPECT & COMPARE

  • git log: ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋ชจ๋“  ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • git log [branchB]..[branchA]: ๋ธŒ๋žœ์น˜A์˜ ์ปค๋ฐ‹์ค‘ ๋ธŒ๋žœ์น˜B์— ์—†๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • git log --follow [file]: ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ๊นŒ์ง€ ํฌํ•จํ•ด์„œ ํ•ด๋‹น ํŒŒ์ผ์˜ ์ปค๋ฐ‹์„ ๋ณด์—ฌ์ค€๋‹ค.
  • git diff [branchB]...[branchA]: ๋ธŒ๋žœ์น˜A๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ธŒ๋žœ์น˜B์™€ ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค€๋‹ค.
  • git show [SHA]: ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

TRACKING PATH CHANGES

  • git rm [file]: ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ , ์Šคํ…Œ์ด์ง€์—์„œ๋„ ์ด๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  • git mv [existing-path] [new-path]: ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์Šคํ…Œ์ด์ง€์— ์ด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • git log --stat -M: ๊ฒฝ๋กœ๊ฐ€ ์ด๋™ํ•œ ๋ชจ๋“  ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

IGNORING PATTERNS

logs/
*.notes
pattern*/

git์ด ๋ฌด์‹œํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ํŒŒ์ผ๋“ค์˜ ํŒจํ„ด์„ .gitignore์— ๊ธฐ๋กํ•ด ๋‘”๋‹ค.

  • git config --global core.excludesfile [file]: ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์—์„œ ๋ชจ๋“  ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ๋ฌด์‹œํ•  ํŒŒ์ผ์„ ์„ค์ •ํ•œ๋‹ค.
  • git remote add [alias] [url]: git URL์„ ๋ณ„์นญ๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • git fetch [alias]: Git remote์—์„œ ๋ชจ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ํŒจ์น˜ํ•œ๋‹ค.
  • git merge [alias]/[branch]: ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—๋‹ค๊ฐ€ ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹ ๋‚ด์šฉ์„ ๋ณ‘ํ•ฉํ•œ๋‹ค.
  • git push [alias] [branch]: ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ปค๋ฐ‹์„ ๋ฆฌ๋ชจํŠธ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ๋ธŒ๋žœ์น˜์— ์ „์†กํ•œ๋‹ค.
  • git pull: ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜์—์„œ ์ถ”์ ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์ปค๋ฐ‹์„ ํŒจ์น˜ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜์—ฌ ์ตœ์‹ ํ™” ํ•œ๋‹ค.

REWRITE HISTORY

  • git rebase [branch]: ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ณด๋‹ค ์•ž์„œ์žˆ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ๋‚ด์šฉ (์ปค๋ฐ‹)์„ ๋•ก๊ฒจ์™€์„œ ์ ์šฉํ•œ๋‹ค.
  • git reset --hard [commit]: ์Šคํ…Œ์ด์ง• ์˜์—ญ์— ์žˆ๋Š” ๊ฒƒ์„ ๋ชจ๋‘ ํด๋ฆฌ์–ดํ•˜๊ณ , ํŠน์ • ์ปค๋ฐ‹ ๋ฒ„์ „์œผ๋กœ ๋ชจ๋“  ์ž‘์—…๋‚ด์šฉ์„ ๋ฎ์–ด์จ๋ฒ„๋ฆฐ๋‹ค.

TEMPORARY COMMITS

  • git stash: ํ˜„์žฌ ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ์Šคํ…Œ์ด์ง•๋˜์–ด ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.
  • git stash list: stack ์ˆœ์„œ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  stash ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค.
  • git stash pop: stash stack ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•œ๋‹ค.
  • git stash drop: stash stack ์ตœ์ƒ๋‹จ์— stash๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

References