Deep

Git์˜ 3๊ฐ€์ง€ ๊ณต๊ฐ„

img.png

Working directory

  • untracked : add๋œ ์  ์—†๋Š” ํŒŒ์ผ ๋˜๋Š” .gitignore๋œ ํŒŒ์ผ

  • tracked : add๋œ ์  ์žˆ๊ณ  ๋ณ€๊ฒฝ๋‚ด์—ญ์ด ์žˆ๋Š” ํŒŒ์ผ

  • git add ๋ช…๋ น์–ด๋กœ Staging area๋กœ ์ด๋™

Staging area

  • ์ปค๋ฐ‹์„ ์œ„ํ•œ ์ค€๋น„ ๋‹จ๊ณ„

    • ์˜ˆ) ์ž‘์—…์„ ์œ„ํ•ด ์„ ํƒ๋œ ํŒŒ์ผ๋“ค

  • git commit ๋ช…๋ น์–ด๋กœ Repository๋กœ ์ด๋™

Repository

  • ์ปค๋ฐ‹๋œ ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ์ €์žฅ์†Œ

  • .git directory๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ

  • commit๋˜์–ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋“ค์–ด๊ฐ„ ํ›„ ์ˆ˜์ •์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด trackedํŒŒ์ผ๋กœ์จ ์Šคํ…Œ์ด์ง•์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์ด ๊ฐœ๋…์„ ๊ทธ๋ฆ‡์œผ๋กœ ๋น„์œ ํ•˜๋ฉด ์ด๋ ‡๋‹ค.

์ƒํƒœ
์„ค๋ช…

untracked

์‹๊ธฐ์„ธ์ฒ™๊ธฐ์— ๋“ค์–ด๊ฐ€ ๋ณธ ์ ์ด ์—†๊ฑฐ๋‚˜ ์‹๊ธฐ์„ธ์ฒ™๊ธฐ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€(ignore)ํ•œ ๊ทธ๋ฆ‡

tracked

์‹๊ธฐ์„ธ์ฒ™๊ธฐ์— ๋“ค์–ด๊ฐ€ ๋ณธ ์ ์ด ์žˆ๊ณ  ์‹๊ธฐ์„ธ์ฒ™๊ธฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ทธ๋ฆ‡

add

์‹๊ธฐ์„ธ์ฒ™๊ธฐ์— ๋„ฃ๋Š” ํ–‰์œ„

staging area

์‹๊ธฐ์„ธ์ฒ™๊ธฐ ์•ˆ(์— ๋“ค์–ด๊ฐ„ ์ƒํƒœ)

commit

์„ธ์ฒ™(์‹๊ธฐ์„ธ์ฒ™๊ธฐ ๊ฐ€๋™)

repository

์„ธ์ฒ™๋˜์–ด ๊นจ๋—ํ•ด์ง„ ์ƒํƒœ

ํŒŒ์ผ ์ˆ˜์ •

๊ทธ๋ฆ‡์ด ์‚ฌ์šฉ๋˜์–ด ์ด๋ฌผ์งˆ(์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ)์ด ๋ฌป์Œ

working directory

์„ธ์ฒ™๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ

  • tracked๊ฐ€ ๋œ๋‹ค๋Š” ๊ฑด Git์˜ ๊ด€๋ฆฌ๋Œ€์ƒ์— ์ •์‹์œผ๋กœ ๋“ฑ๋ก๋จ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ addํ•ด์คŒ์œผ๋กœ์จ, ํ•ด๋‹น ํŒŒ์ผ์ด tracked๋  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

    • Git์ด ์ƒˆ ํŒŒ์ผ๋“ค์„ ๋ฌด์กฐ๊ฑด ๋‹ค ๊ด€๋ฆฌํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€

  • ํŒŒ์ผ ์‚ญ์ œ

git rm (ํŒŒ์ผ ์ด๋ฆ„)

๋งˆ์šฐ์Šค๋กœ ์ง์ ‘ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด๋Š” ์ง์ ‘ ํ•˜๋Š” ๊ฒƒ์€ ํŒŒ์ผ์˜ ์‚ญ์ œ(์ž‘์—…)๊ฐ€ Working directory์— ์žˆ๊ณ  add๋ช…๋ น์–ด๋กœ Staging area๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. rm ๋ช…๋ น์–ด๋กœ ํ•˜๋ฉด ํŒŒ์ผ์˜ ์‚ญ์ œ(์ž‘์—…)๊ฐ€ ๋ฐ”๋กœ Staging area๋กœ ์ด๋™ํ•œ๋‹ค.

  • ํŒŒ์ผ ์ด๋™(์ด๋ฆ„ ๋ณ€๊ฒฝ)

git mv (๊ธฐ์กด ํŒŒ์ผ ๋ช…) (์ƒˆ๋กœ์šด ํŒŒ์ผ ๋ช…)

๋งˆ์šฐ์Šค๋กœ ์ง์ ‘ ํ•˜๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด๋Š” rm๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

  • ํŒŒ์ผ์„ Staging area์—์„œ Working directory๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ

git restore --staged (ํŒŒ์ผ๋ช…)

์ด ๋ช…๋ น์€ Staging area์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด์ „ ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค. ๋‹จ Working directory์—์„œ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‚จ์•„์žˆ๋Š”๋‹ค.

์ด๋–„ --staged์˜ต์…˜์„ ์ƒ๋žตํ•˜๋ฉด Working directory์—์„œ๋„ ํ•ด๋‹น ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋œ๋‹ค. ์ฆ‰ Staging area์™€ Working directory์—์„œ ๋ชจ๋‘ ์ด์ „ ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.

์ •๋ฆฌํ•˜๋ฉด ํŒŒ์ผ์„ Staging area์—์„œ Working directory๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด --staged์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ , ์˜ต์…˜์„ ์ƒ๋žตํ•˜๋ฉด Working directory์—์„œ๋„ ๋ณ€๊ฒฝ์‚ฌํž์ด ์ œ๊ฑฐ๋œ๋‹ค.

git reset์˜ 3๊ฐ€์ง€ ์˜ต์…˜

  • --soft : Repository์—์„œ Staging area๋กœ ์ด๋™

  • --mixed(default) : Repository์—์„œ Working directory๋กœ ์ด๋™

  • --hard : ์ˆ˜์ •์‚ฌํ•ญ ์™„์ „ํžˆ ์‚ญ์ œ

Git์˜ HEAD

HEAD๋ž€? - ํ˜„์žฌ ์†ํ•œ ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์ตœ์‹  ์ปค๋ฐ‹

  • HEAD๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

git checkout HEAD^

^ ๋˜๋Š” ~์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ด์ „์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์˜ˆ) git checkout HEAD^^^ : ์ด์ „์œผ๋กœ 3๊ฐœ ์ด๋™, git checkout HEAD~5 : ์ด์ „์œผ๋กœ 5๊ฐœ ์ด๋™ ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. -> git checkout (์ปค๋ฐ‹ ํ•ด์‹œ)

  • ์ด๋™์„ ํ•œ ๋‹จ๊ณ„ ๋˜๋Œ๋ฆฌ๊ธฐ

git checkout -

Ctrl Z์™€ ๋น„์Šท

์ด์ „์œผ๋กœ checkout๋œ ์ƒํƒœ์—์„œ ํ„ฐ๋ฏธ๋„๋กœ ์–ด๋–ค ๋ธŒ๋žœ์น˜์— ์žˆ๋‚˜๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์ƒ์„ฑํ•œ ์  ์—†๋Š” ์ต๋ช…์˜ ๋ธŒ๋žœ์น˜์— ์œ„์น˜ํ•ด ์žˆ๋‹ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ์กด ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„์˜ค๊ธฐ

git switch (๋ธŒ๋žœ์น˜๋ช…)

HEAD์˜ ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ reset๊ณผ revert์™€ ๋น„๊ตํ•ด์„œ ๊น”๋”ํ•˜๊ฒŒ ์–ด๋А ํŠน์ • ์ปค๋ฐ‹ ์‹œ์ ์œผ๋กœ ๊ฐ€์„œ ๊ฑฐ๊ธฐ์„œ ๋˜ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • HEAD ์‚ฌ์šฉํ•ด์„œ resetํ•˜๊ธฐ

git reset HEAD(์›ํ•˜๋Š” ๋‹จ๊ณ„) (์˜ต์…˜)

์›ํ•˜๋Š” ๋‹จ๊ณ„์—๋Š” ^์ด๋‚˜ ~๋กœ ๋‹จ๊ณ„๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์˜ต์…˜์—๋Š” --soft, --mixed, --hard๋ฅผ ์ฃผ๋ฉด ๋œ๋‹ค.

fetch์™€ pull

fetch vs pull

  • fetch : ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•จ

  • pull : ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์™€ merge๋˜๋Š” rebase ํ•œ๋‹ค.(fetch๊ณผ์ •์„ ํฌํ•จ)

์˜ˆ๋ฅผ ๋“ค๋ฉด git fetch๋กœ ๋จผ์ € ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ™•์ธํ•ด์„œ ์‹คํ–‰๋„ ํ•ด๋ณด๊ณ  ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™๋‹ค๋ฉด ๋‚ด ๋กœ์ปฌ ํ™˜๊ฒฝ์— pull๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

  • ์›๊ฒฉ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ ํ™•์ธ

git fetch

ํ›„์—

git checkout origin/main

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋ฐ›์•„์˜ค๊ณ  ์ฝ”๋“œ ์ƒ์œผ๋กœ ๋” ํ™•์‹คํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ์›๊ฒฉ์˜ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด git fetch๋ฅผ ํ•˜๊ณ  ๋ธŒ๋žœ์น˜๋ช…์„ ํ™•์ธํ•œ ๋‹ค์Œ ๋‘ ๋ช…๋ น์œผ๋กœ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

git checkout origin/(๋ธŒ๋žœ์น˜๋ช…)

์ด ๋ช…๋ น์€ ๋กœ์ปฌ์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.(ํ™•์ธ๋งŒ ํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ๋ธŒ๋žœ์น˜๋Š” ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ)

git switch -t origin/(๋ธŒ๋žœ์น˜๋ช…)

์ด ๋ช…๋ น์€ ๋กœ์ปฌ์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”์ ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Git help

Git ์‚ฌ์šฉ ์ค‘ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ด ์žˆ์„ ๋•Œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

  • ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด๋“ค๊ณผ ์„ค๋ช…

git help
  • Git์˜ ๋ชจ๋“  ๋ช…๋ น์–ด๋“ค

git help -a

j๋กœ ๋‚ด๋ฆฌ๊ณ , k๋กœ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. :q(๋˜๋Š” q)๋กœ ๋‹ซ๋Š”๋‹ค.

  • ํ•ด๋‹น ๋ช…๋ น์–ด์˜ ์„ค๋ช…๊ณผ ์˜ต์…˜ ๋ณด๊ธฐ

git (๋ช…๋ น์–ด) -h

์˜ˆ) git commit -h, git push -h ๋“ฑ

  • ํ•ด๋‹น ๋ช…๋ น์–ด์˜ ์„ค๋ช…๊ณผ ์˜ต์…˜์„ ์›น ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜๊ธฐ

git help (๋ช…๋ น์–ด)

๋˜๋Š”

git (๋ช…๋ น์–ด) --help

์›น์—์„œ ์—ด๋ฆฌ์ง€ ์•Š์œผ๋ฉด ๋์— -w๋ฅผ ๋ถ™์—ฌ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Git config

ํŠน์ • ํ”„๋กœ์ ํŠธ์—์„œ user.name๊ณผ user.email์„ --global ์˜ต์…˜ ์—†์ด ์ง€์ •ํ•˜๋ฉด ํŠน์ • ํ”„๋กœ์ ํŠธ๋งŒ์˜ ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ˜„์žฌ ๋ชจ๋“  ์„ค์ •๊ฐ’ ๋ณด๊ธฐ

git config (global) --list

global์„ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ์„ค์ •๊ฐ’์ด ๋‚˜์˜ค๊ณ , ๋ช…์‹œํ•˜๋ฉด global๋กœ ์„ค์ •๋œ ๊ฐ’๋“ค๋งŒ ๋‚˜์˜จ๋‹ค.

  • ์—๋””ํ„ฐ์—์„œ ๋ณด๊ธฐ

git config (global) -e

global์€ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ๋ณธ ์—๋””ํ„ฐ ์ˆ˜์ •

git config --global core.editor "code --wait"

code์ž๋ฆฌ์— ์›ํ•˜๋Š” ํŽธ์ง‘ ํ”„๋กœ๊ทธ๋žจ์˜ .exeํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. --wait์€ ๋ฐ์ดํ„ฐ์—์„œ ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ CLI๋ฅผ ์ •์ง€ํ•œ๋‹ค. git commit ๋“ฑ์˜ ํŽธ์ง‘๋„ ์ง€์ •๋œ ์—๋””ํ„ฐ์—์„œ ์—ฐ๋‹ค.

  • ์œˆ๋„์šฐ์™€ ๋งฅ ์ค„๋ฐ”๊ฟˆ ํ˜ธํ™˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

git config --global core.autocrlf (์œˆ๋„์šฐ: true / ๋งฅ: input)
  • pull ๊ธฐ๋ณธ ์ „๋žต merge๋˜๋Š” rebase๋กœ ์„ค์ •

git config pull.rebase false
git config pull.rebase true
  • ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋ช… ์„ค์ •

git config --global init.defaultBranch main
  • push์‹œ ๋กœ์ปฌ๊ณผ ๋™์ผํ•œ ๋ธŒ๋žœ์น˜๋ช…์œผ๋กœ ์„ค์ •

git config --global push.default current
  • ๋‹จ์ถ•ํ‚ค ์„ค์ •

git config --global alias.(๋‹จ์ถ•ํ‚ค) "๋ช…๋ น์–ด"

์˜ˆ) git config --global alias.cam "commit -am" : git commit -am๋Œ€์‹  git cam ๊ด€๋ จ ๋ฌธ์„œ

Last updated