TIL/Git

TIL 10: Git ๊ธฐ์ดˆ

Deviloper๐Ÿ˜ˆ 2021. 7. 30. 21:50

Git

ํ”„๋กœ๊ทธ๋žจ ๋ฒ„์ „์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ

 

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

 

 

Github

Git์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” Hub (๋ณด๊ด€์†Œ ์ •๋„๋กœ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!) ์ด์™ธ์—๋„ GitLab, Bitbucket๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์›๊ฒฉ ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์ปดํ“จํ„ฐ ์•ˆ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ ์ƒ์— ์ €์žฅ์„ ํ•ด๋‘๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ๊ฐ€ ๊ณ ์žฅ๋‚œ๋‹ค๊ณ  ํ•ด๋„ ๋‹ค์‹œ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

 

Git๊ณผ Github๋ฅผ ์ž˜ ์•Œ์•„๋‘๋ฉด ํ˜‘์—…์— ๋„์›€์ด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์œผ๋กœ ์ทจ์งํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์€ ์ž˜ ์ตํ˜€๋‘์…”์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

 

๊ฐ„๋‹จํ•˜๊ฒŒ Git์— ๊ด€๋ จ๋œ ์šฉ์–ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์‹œ์ ์— ๋งŒ๋“ค์–ด์ง„ ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ์„ ์Šค๋ƒ…์ƒท์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณต์‚ฌ๋ณธ, ์ฆ‰ ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ž‘์—…์„ commit์ด๋ผ๊ณ  ํ•˜์ฃ ! ์˜คํ”ˆ ์†Œ์Šค๋Š” ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ž…๋‹ˆ๋‹ค. ์ด ์˜คํ”ˆ ์†Œ์Šค์— ํŠน์ • ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ contribute ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๋Š” ์†Œ์Šค ํด๋”์˜ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Git์˜ ๊ด€๋ฆฌ ์•„๋ž˜ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Git์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ํด๋”๋ฅผ Git repository๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Repo ์•ˆ์—์„œ๋„ Remote Repository์™€ Local Repository๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค. Local Repo์—์„œ ๊ฐœ์ธ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด๊ณ , Remote Repo๋Š” ๊ฐœ์ธ์ด ์ž‘์—…ํ•œ ์ฝ”๋“œ๋ฅผ ํƒ€์ธ๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. Repo ๊ฐ„์— ๋‹ค์–‘ํ•œ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜คํ”ˆ์†Œ์Šค๋ฅผ ๊ฐœ์„ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์žˆ๋Š” Repo์—์„œ ๋‚ด Remote Repo๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ Fork๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๊ณ  ๋‚˜๋ฉด ์ด ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด ์ปดํ“จํ„ฐ๋กœ ๊ฐ€์ ธ์™€์•ผ๊ฒ ์ฃ . ์ด ๊ณผ์ •์„ Clone์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋‚ด ์ปดํ“จํ„ฐ์˜ ์ž‘์—…๊ณต๊ฐ„ (Work space)์—์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค ์ˆ˜์ •ํ•˜๊ณ , git์˜ ๊ด€๋ฆฌ ํ•˜์— ์žˆ๋Š” ์ƒํƒœ๋กœ ์˜ฌ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜์—ญ์„ Staging Area๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Staging Area์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ Add๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜์—ญ์— ์žˆ์ง€ ์•Š์€ ํŒŒ์ผ์€ Git์ด ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ๋กœ์จ Unstaged ํ˜น์€ untracked file์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Staged Area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์€ commit์„ ํ†ตํ•ด Local Repo์— ์ €์žฅํ•ด์ค€ ๋’ค, ๋‹ค์‹œ ํƒ€์ธ๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก Remote Repo์— ์˜ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ Push๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ Pull request๋ฅผ ํ†ตํ•ด์„œ ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Git  ๋ช…๋ น์–ด

  • Fork
  • clone 
    git clone <Repo ์ฃผ์†Œ>
  • status: staging area์™€ untracked files์— ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํŽ˜์–ด์˜ ํŒŒ์ผ๊ณผ ๋ณ‘ํ•ฉ์„ ํ•˜๋‹ค๊ฐ€ ์ถฉ๋Œํ•œ ๊ฒฝ์šฐ, ์–ด๋–ค ํŒŒ์ผ์ด ์ถฉ๋Œํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    git status
  • restore: ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ๊ธฐํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ Clone์„ ๋ฐ›์•˜๋˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    git restore <ํŒŒ์ผ๋ช…>
  • add
    ํŠน์ • ํŒŒ์ผ์„ Staging area๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ: git add <ํŒŒ์ผ๋ช…>   
    ๋ชจ๋“  ํŒŒ์ผ์„ ํ•œ๋ฒˆ์— Staging area๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ: git add .
  • commit
    git commit -m 'message': ๋‚ ์งœ, commitํ•œ ์‚ฌ๋žŒ, commit ๋ฉ”์„ธ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • reset: Local Repo์—๋งŒ commit ํ•ด๋†“์€ ์ƒํƒœ ์ผ ๋•Œ, commit์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    git reset HEAD^: HEAD๋Š” ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋ธŒ๋žœ์น˜ ์ž…๋‹ˆ๋‹ค.
    reset์—๋Š” hard, mixed, soft ์˜ต์…˜์ด ์žˆ๋Š”๋ฐ ์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” ๋ฐ‘์— ๊ฐ€์„œ ๋” ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • log: commit๋“ค์˜ ๊ธฐ๋ก์‚ฌํ•ญ
    git log
  • pull
    get pull <shortname> <branch>
  • push
    git push <origin> <branch>
  • init: ๊ธฐ์กด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Git Repo๋กœ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.
    git init
  • remote add: Github์—์„œ ์›๊ฒฉ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ Local Repo์™€ Remote Repo์™€ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.
    git remote add origin <Repo ์ฃผ์†Œ>
    git remote add pair <Repo ์ฃผ์†Œ>: ์œ—์ค„๊ณผ ๋‹ฌ๋ฆฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ Repo์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • remote -v: ์—ฐ๊ฒฐ๋œ Remote Repo ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Git ๋ช…๋ น์–ด๋Š” ์œ„์™€ ๊ฐ™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์–ด ์•„๋ž˜ ํ„ฐ๋ฏธ๋„์—์„œ ์–ด๋–ป์„ธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์จ๋†“์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•ž์„œ Git๊ณผ ๊ด€๋ จ๋œ ์šฉ์–ด๋ฅผ ์‚ดํŽด๋ดค์„ ๋•Œ ๋ดค๋˜ ๋ช…๋ น์–ด๋“ค๋„ ๋ณด์ด๋„ค์š”. ์•ˆ๋‹ค๋ฃจ์—ˆ๋˜ ๋ช…๋ น์–ด๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์„ ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

 

Status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ๊ฐ๊ฐ์˜ ํŒŒ์ผ์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”. ์—ฌ๊ธฐ์„œ Staging area์—์„œ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค.

Unmodified: ๊ธฐ์กด์— Commitํ–ˆ๋˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ ์ƒํƒœ

Modified: ๊ธฐ์กด์— Commitํ–ˆ๋˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ์ƒํƒœ

Staged: commit์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ. 

 

์œ„์—์„œ reset ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ์š”. ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ๋Š” Stackoverflow์—์„œ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค!

soft, mixed, hard๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

  • --soft: ์ด ์˜ต์…˜์€ commit ๋งŒ ์ทจ์†Œํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Staging Area์—๋Š” ์žˆ๋„๋ก ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. 
  • --mixed (default): commit๊ณผ stage ๋‘ ๊ณผ์ •์„ ์ทจ์†Œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Working Tree์—๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.
  • --hard: commit๊ณผ unstage๋ฅผ ์ง€์šธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด Git์„ ์ƒˆ๋กœ ์‚ฌ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ˜‘์—…ํ•  ๋•Œ๋„ ์ค‘์š”ํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค๊ณ  ํ•ด์„œ ๋” ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ํŽ˜์–ด์™€ ํŒŒ์ผ์„ ๋ฉ”์ผ์ด๋‚˜ ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์ €์—๊ฒŒ๋Š” ๊ต‰์žฅ์ด ์ƒˆ๋กœ์› ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋“ค์ด ๋งŽ์ด ์žˆ์–ด์„œ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€, ๋ช…๋ น์–ด ์ด๋ฆ„์ด ๋ญ์˜€๋Š”์ง€ ์ƒ๊ฐ์ด ์•ˆ๋‚˜์„œ ์ข€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹คใ…  ์ฃผ๋ง์— ํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ณผ์ •์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋ฒˆ ๋” ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!