Bibi's DevLog ๐Ÿค“๐ŸŽ

[์ง€์˜ฅ์—์„œ ์˜จ Git] 2. ๊นƒ ๋ฒ„์ „ ๊ด€๋ฆฌ - ๊ฐœ๋… / status, add, commit, log, diff / ๊นƒ ํŒŒ์ผ ์ƒํƒœ / .gitignore / ๋˜๋Œ๋ฆฌ๊ธฐ checkout, reset, revert ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Git & GIthub ๊นƒ๊ณผ ๊นƒํ—ˆ๋ธŒ

[์ง€์˜ฅ์—์„œ ์˜จ Git] 2. ๊นƒ ๋ฒ„์ „ ๊ด€๋ฆฌ - ๊ฐœ๋… / status, add, commit, log, diff / ๊นƒ ํŒŒ์ผ ์ƒํƒœ / .gitignore / ๋˜๋Œ๋ฆฌ๊ธฐ checkout, reset, revert

๋น„๋น„ bibi 2021. 2. 9. 00:12

2. ๊นƒ์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ

๊นƒ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š”, ๋จผ์ € ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊นƒ์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  • git init : initialize(์ดˆ๊ธฐํ™”ํ•˜๋‹ค) ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ์†Œ(.git)๋ฅผ ๋งŒ๋“ฆ.
    (๊นƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•จ)
    • .git : ๊นƒ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฒ„์ „์ด ์ €์žฅ๋  ์ €์žฅ์†Œ(repository).
      ์ˆจ๊น€ ํŒŒ์ผ์ด๋‹ค (์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ˆ˜๋กœ .git์„ ์ง€์šฐ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด)
  • git init ๋””๋ ‰ํ† ๋ฆฌ๋ช… : ์ƒˆ๋กœ์šด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ €์žฅ์†Œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•จ (mkdir + init)

๋ฒ„์ „์ด๋ž€?

: (ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์—์„œ) ์ˆ˜์ • ๋‚ด์šฉ์ด ์Œ“์—ฌ ์ด์ „ ์ƒํƒœ์™€ ๊ตฌ๋ณ„๋œ ๊ฒƒ. ์ƒˆ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌํ•จ.
0.0.1 - 0.0.2 - ... - 2.23.0 ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„

: (๊นƒ์—์„œ) ๋ฌธ์„œ๋ฅผ ์ˆ˜์ • ๋ฐ ์ €์žฅํ•  ๋–„๋งˆ๋‹ค ์ƒ๊ธฐ๋Š” ๊ฒƒ.

์ž‘์—… ํŠธ๋ฆฌ, ์Šคํ…Œ์ด์ง€, ์ €์žฅ์†Œ ๋ฐ ์ปค๋ฐ‹

  • ์ž‘์—… ํŠธ๋ฆฌ working tree (๋˜๋Š” ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ)
    : ํŒŒ์ผ ์ˆ˜์ •, ์ €์žฅ ๋“ฑ ์ž‘์—…์„ ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ. ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์ด๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹นํ•จ.
  • ์Šคํ…Œ์ด์ง€ stage (๋˜๋Š” ์Šคํ…Œ์ด์ง• ์˜์—ญ)
    : (.git์— ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค)
    ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค ํŒŒ์ผ์ด ๋Œ€๊ธฐํ•˜๋Š” ๊ณณ.
    ์ˆ˜์ •ํ•œ ํŒŒ์ผ ์ค‘ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง€๋กœ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.
    • .git/index : ์Šคํ…Œ์ด์ง€์˜ ๋‚ด์šฉ์€ .git ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ธ๋ฑ์Šค ํŒŒ์ผ์— ์ €์žฅ๋จ
  • ์ €์žฅ์†Œ repository (๋ฆฌํฌ์ง€ํ† ๋ฆฌ)
    : (.git์— ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค)
    ์Šคํ…Œ์ด์ง€์˜ ๋Œ€๊ธฐ ํŒŒ์ผ๋“ค์„ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด ์ €์žฅํ•˜๋Š” ๊ณณ.
    • .git/HEAD : ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์€ .git๋””๋ ‰ํ† ๋ฆฌ์˜ HEADํŒŒ์ผ์— ์ €์žฅ๋จ
  • ์ปค๋ฐ‹ commit
    : ์Šคํ…Œ์ด์ง€์˜ ๋Œ€๊ธฐ ํŒŒ์ผ๋“ค์„ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๋ช…๋ น.

๊นƒ ์ƒํƒœ ํ™•์ธ

  • git status
    : ๊นƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด.
    • On branch master : ํ˜„์žฌ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ์žˆ๋‹ค.
    • No commits yet : ์•„์ง ์ปค๋ฐ‹ํ•œ ํŒŒ์ผ์ด ์—†๋‹ค.
    • nothing to commit : ํ˜„์žฌ ์ปค๋ฐ‹ํ•  ํŒŒ์ผ์ด ์—†๋‹ค. =๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค ํŒŒ์ผ์ด ์—†๋‹ค.
    • Untracked files : ํŒŒ์ผ๋ช… : ํ•œ ๋ฒˆ๋„ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์€ ํŒŒ์ผ์ด ์žˆ๋‹ค.
    • Changes to be committed : ํŒŒ์ผ๋ช… : ์ƒˆ ํŒŒ์ผ์„ ์•ž์œผ๋กœ ์ปค๋ฐ‹ํ•  ๊ฒƒ์ด๋‹ค.
    • working tree clean : ์ž‘์—… ํŠธ๋ฆฌ๊ฐ€ ์ˆ˜์ •์‚ฌํ•ญ ์—†์ด ๊นจ๋—ํ•˜๋‹ค.
    • Changes not staged for commit : ํŒŒ์ผ๋ช… : ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ๊ณ  ์•„์ง ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์•˜๋‹ค.

์Šคํ…Œ์ด์ง• - add

  • git add ํŒŒ์ผ๋ช…
    : ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ์ƒ์„ฑ ๋˜๋Š” ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง€์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด.
    '์Šคํ…Œ์ด์ง• staging' ๋˜๋Š” '์ธ๋ฑ์Šค์— ๋“ฑ๋กํ•œ๋‹ค' ๋ผ๊ณ  ํ•จ.

  • git add .
    : ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ์Šคํ…Œ์ด์ง€์— ์ถ”๊ฐ€ํ•จ.

    • add๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ์Šคํ…Œ์ด์ง•์ด ๋๋‚œ ๊ฒƒ = ๋ฒ„์ „์„ ๋งŒ๋“ค ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค.

    • warning: LF will be replaced by CRLF in ํŒŒ์ผ๋ช….
      The fill will have its original line endings in your working directory
      : (์˜๋ฏธ)๊นƒ์—์„œ ์ž๋™์œผ๋กœ ํ…์ŠคํŠธ๋ฌธ์„œ์˜ CRLF๋ฌธ์ž๋ฅผ LF๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด ์ปค๋ฐ‹ํ•˜๊ฒ ๋‹ค.
      ์œˆ๋„์šฐ์™€ ๋ฆฌ๋ˆ…์Šค์˜ ์ค„๋ฐ”๊ฟˆ๋ฌธ์ž( = ๊ฐœํ–‰๋ฌธ์ž, end of line, eol, line endings)๊ฐ€ ๋‹ฌ๋ผ์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ๊ณ .

      ์œˆ๋„์šฐ๋Š” ํŒŒ์ผ ์ €์žฅ์‹œ, ์ค„๋ฐ”๊ฟˆ ์ž๋ฆฌ์— CR๋ฌธ์ž์™€ LF๋ฌธ์ž๊ฐ€ ์‚ฝ์ž…๋จ (=CRLF)
      ๋ฐ˜๋ฉด ๋ฆฌ๋ˆ…์Šค & ๋งฅ์€ ํŒŒ์ผ ์ €์žฅ์‹œ, ์ค„๋ฐ”๊ฟˆ ์ž๋ฆฌ์— LF๋ฌธ์ž๊ฐ€ ์‚ฝ์ž…๋จ
      ๊นƒ์€ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ์œˆ๋„์šฐ ํ…์ŠคํŠธ๋ฌธ์„œ๋ฅผ ์Šคํ…Œ์ด์ง•ํ•  ๋•Œ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ.
      (๋ฉ”์‹œ์ง€ ๋œป๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ๋œ๋‹ค)

์ปค๋ฐ‹ - commit

  • git commit -m "์ปค๋ฐ‹๋ฉ”์‹œ์ง€"
    : ๊นƒ์—์„œ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๋Š” ๋ช…๋ น์–ด.
    ์Šคํ…Œ์ด์ง€์— ์žˆ๋Š” ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ์ €์žฅ์†Œ์— ์ €์žฅํ•จ.

    • -m : ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์˜ต์…˜. ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋Š” ์ฃผ๋กœ ์˜์–ด๋กœ ์ž‘์„ฑ
    • 1 file changed, 1 insertion(+)
      : ํŒŒ์ผ 1๊ฐœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ณ , ํŒŒ์ผ์— 1๊ฐœ์˜ ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
      (์ปค๋ฐ‹ํ•œ ํŒŒ์ผ์ด ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋จ)
  • git commit -am "์ปค๋ฐ‹๋ฉ”์‹œ์ง€" (๋˜๋Š” git commit -a -m "์ปค๋ฐ‹๋ฉ”์‹œ์ง€")
    : add + commit.
    ๊นƒ์—์„œ ์Šคํ…Œ์ด์ง•๊ณผ ์ปค๋ฐ‹์„ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด.

    • ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ปค๋ฐ‹ํ•œ ์ ์ด ์žˆ๋Š” ํŒŒ์ผ ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • git commit --amend
    : ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •

์ปค๋ฐ‹ ๋กœ๊ทธ : ์ปค๋ฐ‹ ๋‚ด์šฉ ํ™•์ธํ•˜๊ธฐ

  • git log : ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ์‚ดํŽด๋ณด๋Š” ๋ช…๋ น์–ด.
    ์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“  ๋ฒ„์ „ ๋ฐ ์ปค๋ฐ‹ ์ž‘์„ฑ์ž, ์ž‘์„ฑ์‹œ๊ฐ„, ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ์กฐํšŒ ๊ฐ€๋Šฅ.
  • git log --stat : ๊ฐ ์ปค๋ฐ‹๋กœ๊ทธ์— ๊ด€๋ จ๋œ ํŒŒ์ผ๊นŒ์ง€ ์ž์„ธํžˆ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • git log --oneline : ํ•œ ์ค„์— ํ•œ ์ปค๋ฐ‹์”ฉ ๊ฐ„๋žตํžˆ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • git log --oneline --branches : ๋ชจ๋“  ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹์„ ํ•œ ์ค„์”ฉ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • git log --oneline --branches --graph : ๋ชจ๋“  ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์˜ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ํ‘œ์‹œํ•จ
  • git log ๋ธŒ๋žœ์น˜1..๋ธŒ๋žœ์น˜2 : ๋ธŒ๋žœ์น˜1๊ธฐ์ค€์œผ๋กœ ๋ธŒ๋žœ์น˜2์™€ ๋น„๊ตํ•จ (๋ธŒ๋žœ์น˜2์—๋งŒ ์žˆ๋Š” ์ปค๋ฐ‹์„ ๋‚˜ํƒ€๋ƒ„)
  • ์ปค๋ฐ‹ ๋กœ๊ทธ commit log : git log๋กœ ๋‚˜์˜ค๋Š” ์ปค๋ฐ‹ ๋‚ด์—ญ๋“ค์„ ๋งํ•จ.
  • ๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ ํ•œ ํ™”๋ฉด์”ฉ ๋‚˜๋ˆ„์–ด ๋ณด์—ฌ์ค€๋‹ค.
    • Enter๋กœ ๋‹ค์Œ ๋กœ๊ทธํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ.
    • q๋กœ ๋กœ๊ทธ ํ™”๋ฉด์„ ๋น ์ ธ๋‚˜์™€ ๊นƒ ๋ช…๋ น์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ.

์ปค๋ฐ‹๋กœ๊ทธ

  • commit 70b22aae93090437b55f79890bd54a39c2ebb2f8
    : ์ปค๋ฐ‹ ํ•ด์‹œ commit hash (๋˜๋Š” ๊นƒ ํ•ด์‹œ).
    ์ปค๋ฐ‹์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์•„์ด๋””์— ํ•ด๋‹นํ•จ
  • (HEAD -> master)
    : ํ•ด๋‹น ๋ฒ„์ „/์ปค๋ฐ‹์ด ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์‹œ.
  • Author :
    : ๋ฒ„์ „์„ ๋งŒ๋“  ์‚ฌ๋žŒ
  • Date :
    : ๋ฒ„์ „์ด ๋งŒ๋“ค์–ด์ง„ ๋‚ ์งœ
  • commit message 1 ๋“ฑ Date ์•„๋ž˜์˜ ๋‚ด์šฉ
    : ์ž‘์„ฑ์ž๊ฐ€ ๊ธฐ๋กํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€

๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ™•์ธํ•˜๊ธฐ - git diff

์ž‘์—…ํŠธ๋ฆฌ์˜ ํŒŒ์ผ vs ์Šคํ…Œ์ด์ง€์˜ ํŒŒ์ผ ๋น„๊ต
๋˜๋Š” ์Šคํ…Œ์ด์ง€์˜ ํŒŒ์ผ vs ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

  • git diff
    : ์ˆ˜์ •ํ•œ ํŒŒ์ผ ๊ณผ ์ตœ์‹  ๋ฒ„์ „์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด.
    • - ์ดํ•˜ ๋นจ๊ฐ„์ƒ‰ ๋‚ด์šฉ : ์‚ญ์ œ๋œ ๋‚ด์šฉ
    • + ์ดํ•˜ ์ดˆ๋ก์ƒ‰ ๋‚ด์šฉ : ์ถ”๊ฐ€๋œ ๋‚ด์šฉ

๋ฒ„์ „ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋งˆ๋‹ค ํŒŒ์ผ ์ƒํƒœ ์•Œ์•„๋ณด๊ธฐ

๊นƒ์—์„œ๋Š” ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํŒŒ์ผ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค.

  • git log --stat : ๊ฐ ์ปค๋ฐ‹๋กœ๊ทธ์— ๊ด€๋ จ๋œ ํŒŒ์ผ๊นŒ์ง€ ์ž์„ธํžˆ ๋‚˜ํƒ€๋‚ธ๋‹ค.

trackedํŒŒ์ผ๊ณผ untrackedํŒŒ์ผ

์ž‘์—… ํŠธ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์€ ํฌ๊ฒŒ trackedํŒŒ์ผ๊ณผ untrackedํŒŒ์ผ๋กœ ๋‚˜๋‰œ๋‹ค.

ํŠธ๋ž™์–ธํŠธ๋ž™

  • tracked ํŒŒ์ผ
    : ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ปค๋ฐ‹ํ•œ ์ ์ด ์žˆ์–ด, ๊นƒ์ด ์ˆ˜์ •๋‚ด์—ญ์„ ์ถ”์ ํ•˜๋Š” ํŒŒ์ผ.
    • Changes not staged for commit: : ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์Œ.
    • modified: ์ˆ˜์ •๋œํŒŒ์ผ๋ช… : ์ˆ˜์ •๋œ ํŒŒ์ผ์„ ์•Œ๋ ค์คŒ.
  • untracked ํŒŒ์ผ
    : ํ•œ ๋ฒˆ๋„ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•œ ์ ์ด ์—†์–ด, ๊นƒ์ด ์ˆ˜์ •๋‚ด์—ญ์„ ์ถ”์ ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ.
    • Untracked files: ..

ํŠธ๋ž™์–ธํŠธ๋ž™add

  • trackedํŒŒ์ผ : addํ•˜๋ฉด modified๋กœ ํ‘œ์‹œ๋จ
  • untrackedํŒŒ์ผ : addํ•˜๋ฉด new file๋กœ ํ‘œ์‹œ๋จ

.gitignore

: ๋ฒ„์ „ ๊ด€๋ฆฌ ์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—, ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์„ ๋–„ ์‚ฌ์šฉํ•˜๋Š” ์ˆจ๊น€ ํŒŒ์ผ.

  • .gitignore๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ ๋‚ด์—
    ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด๋‚˜ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  • ์ฃผ๋กœ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” .swpํŒŒ์ผ, ๋ฐฑ์—… ํŒŒ์ผ, ๋ฉ”๋ชจ ํŒŒ์ผ ๋“ฑ์ด ํฌํ•จ๋จ.

unmodified, modified, staged ์ƒํƒœ

tracked ํŒŒ์ผ์€ ์ปค๋ฐ‹ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ unmodified, modified, staged ์ƒํƒœ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

unmodi

  • unmodified ์ƒํƒœ
    : ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ํ›„ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ. ์ž‘์—… ํŠธ๋ฆฌ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์Œ.

    • git status : nothing to commit, working tree clean ์œผ๋กœ ๋‚˜ํƒ€๋‚จ
  • modified ์ƒํƒœ
    : ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ํ›„ ์ˆ˜์ •๋˜์—ˆ์œผ๋‚˜, ์•„์ง ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์€ ์ƒํƒœ.

    • git status : Changes not staged for commit , modified : ํŒŒ์ผ๋ช…(๋นจ๊ฐ„์ƒ‰) ์œผ๋กœ ๋‚˜ํƒ€๋‚จ
  • staged ์ƒํƒœ
    : ์ˆ˜์ •๋œ ํŒŒ์ผ์ด ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ.

    • ์ปค๋ฐ‹ ์ง์ „ ๋‹จ๊ณ„ - ์ปค๋ฐ‹ํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ƒํƒœ์ž„.
    • staged์ƒํƒœ์˜ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๋ฉด, ํ•ด๋‹น ํŒŒ์ผ์€ ๋‹ค์‹œ unmodified์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    • git status : Changes to be committed, modified : ํŒŒ์ผ๋ช…(์ดˆ๋ก์ƒ‰) ์œผ๋กœ ๋‚˜ํƒ€๋‚จ

์ž‘์—… ๋˜๋Œ๋ฆฌ๊ธฐ

์ž‘์—… ํŠธ๋ฆฌ - ์Šคํ…Œ์ด์ง€ - ์ €์žฅ์†Œ ๊ฐ ๋‹จ๊ณ„๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

์ž‘์—… ํŠธ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ ๋˜๋Œ๋ฆฌ๊ธฐ

  • git checkout
    : ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์„ ์ทจ์†Œํ•˜๊ณ , ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ ค ํ•  ๋•Œ ์‚ฌ์šฉํ•จ.
    • checkout์œผ๋กœ ๋˜๋Œ๋ฆฐ ๋‚ด์šฉ์€ ๋‹ค์‹œ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.
  • ์กฐ๊ฑด : ์ž‘์—…ํŠธ๋ฆฌ์—์„œ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์•„์ง ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฌ์ง€ ์•Š์•˜์„ ๋•Œ.
    • Change not staged for commit
      (๊ตฌ)(use "git checkout <file>..." to discard changes in working directory)
  • โŒ ํ˜„์žฌ checkout๋ช…๋ น์–ด๋Š” ์‚ฌ๋ผ์ง€๊ณ switch์™€ restore๋กœ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ.
    ๋”ฐ๋ผ์„œ ์ˆ˜์ • ํŒŒ์ผ์„ ๋˜๋Œ๋ฆด ๋•Œ๋Š” checkout ๋Œ€์‹  restore๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    (use "git restore <file>..." to discard changes in working directory)
    • checkout: Switch branches or restore working tree files
    • switch: Switch branches
    • restore: Restore working tree files
  • git restore ํŒŒ์ผ๋ช… : ํ•ด๋‹น ํŒŒ์ผ์˜ ์ž‘์—…ํŠธ๋ฆฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œํ•จ.
    (deprecated) git checkout -- hello.txt ๋„ ๊ฐ™์€ ๊ธฐ๋Šฅ.

์Šคํ…Œ์ด์ง• ๋˜๋Œ๋ฆฌ๊ธฐ (unstage)

  • git reset HEAD ํŒŒ์ผ๋ช…
    : ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ์˜ ์Šคํ…Œ์ด์ง•์„ ์ทจ์†Œํ•˜๋Š” ๋ช…๋ น์–ด.

  • ์กฐ๊ฑด : ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ (์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ)

    • Changes to be committed :
    • (๊ตฌ)(use "git reset HEAD <file>..." to unstage)
      • ์‚ฌ์šฉ ํ›„ : Unstaged changes after reset : ํŒŒ์ผ๋ช…
    • (ํ˜„์žฌ)(use "git restore --staged <file>... " to unstage)
      • ์ •์ƒ์ ์œผ๋กœ unstage๋œ ๊ฒฝ์šฐ ์•„๋ฌด๋Ÿฐ ๋ฉ”์‹œ์ง€ ์—†์Œ

์ตœ์‹  ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ

  • git reset HEAD^
    : ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ•œ ์ปค๋ฐ‹(HEAD -> master)์„ ์ทจ์†Œํ•จ.
    • HEAD^ : ํ˜„์žฌ HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ด.
    • ์‚ฌ์šฉ ํ›„ : Unstaged changes after reset : ํŒŒ์ผ๋ช… (unstage์™€ ๋™์ผ)
  • git reset HEAD~3
    : ๊ฐ€์žฅ ์ตœ๊ทผ์˜ 3๊ฐœ์˜ ์ปค๋ฐ‹์„ ์ทจ์†Œํ•จ.
  • ์ทจ์†Œํ•œ ํŒŒ์ผ์ด ์ž‘์—… ํŠธ๋ฆฌ์—๋งŒ ๋‚จ๋Š”๋‹ค.
  • ์ปค๋ฐ‹๋„ ์ทจ์†Œ๋˜๊ณ  ์Šคํ…Œ์ด์ง€์—์„œ๋„ ๋‚ด๋ ค๊ฐ„๋‹ค.
  • git reset --soft HEAD^ : ์ตœ๊ทผ ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ „ ์ƒํƒœ๋กœ ์ž‘์—…ํŠธ๋ฆฌ๋ฅผ ๋˜๋Œ๋ฆผ.
  • git reset --mixed HEAD^: ์ตœ๊ทผ ์ปค๋ฐ‹๊ณผ ์Šคํ…Œ์ด์ง•์„ ํ•˜๊ธฐ ์ „ ์ƒํƒœ๋กœ ์ž‘์—…ํŠธ๋ฆฌ๋ฅผ ๋˜๋Œ๋ฆผ.
    • (์˜ต์…˜ ์—†์ด git reset์„ ํ•  ๊ฒฝ์šฐ ์ด ์˜ต์…˜์œผ๋กœ ์ž‘๋™ํ•จ)
  • git reset --hard HEAD^ : ์ตœ๊ทผ ์ปค๋ฐ‹๊ณผ ์Šคํ…Œ์ด์ง•, ํŒŒ์ผ ์ˆ˜์ • ์ „ ์ƒํƒœ๋กœ ์ž‘์—…ํŠธ๋ฆฌ๋ฅผ ๋˜๋Œ๋ฆผ.
    • ์ด ์˜ต์…˜์œผ๋กœ ๋˜๋Œ๋ฆฐ ๋‚ด์šฉ์€ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Œ.

ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ

  • git reset ์ปค๋ฐ‹ํ•ด์‹œ : ์ปค๋ฐ‹ํ•ด์‹œ์˜ ์ปค๋ฐ‹(๋ฒ„์ „)์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ณ , ๊ทธ ์ดํ›„ ๋ฒ„์ „์€ ์‚ญ์ œํ•จ.

    • ํ•ด๋‹น ์ปค๋ฐ‹์„ ๋ฆฌ์…‹ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ตœ์‹  ์ปค๋ฐ‹์ด ์ปค๋ฐ‹ํ•ด์‹œ์ปค๋ฐ‹์ด ๋˜๋„๋ก ๋ฆฌ์…‹ํ•˜๋Š” ๊ฒƒ์ž„.
    • ์ปค๋ฐ‹ํ•ด์‹œ : "๋˜๋Œ์•„๊ฐˆ ์ปค๋ฐ‹ํ•ด์‹œ"๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • git reset --hard ์ปค๋ฐ‹ํ•ด์‹œ : ์ปค๋ฐ‹ํ•ด์‹œ ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ณ , ๊ทธ ์ดํ›„์˜ ์ปค๋ฐ‹, ์Šคํ…Œ์ด์ง•, ํŒŒ์ผ์ˆ˜์ •์„ ๋ชจ๋‘ ์‚ญ์ œํ•จ.(๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅ)

    • ์‚ฌ์šฉ ํ›„ : HEAD is now at ์ปค๋ฐ‹ํ•ด์‹œ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€.

์ปค๋ฐ‹ํ•ด์‹œ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ๋Š” ๋‹จ์ถ•ํ‚ค๊ฐ€ ์•„๋‹Œ ๋งˆ์šฐ์Šค ํด๋ฆญ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ปค๋ฐ‹ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋˜๋Œ๋ฆฌ๊ธฐ (์ทจ์†Œ)

๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๋Œ€๋น„ํ•ด, ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆฌ๋”๋ผ๋„ ์ทจ์†Œํ•œ ์ปค๋ฐ‹์„ ๋‚จ๊ฒจ๋‘์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ.

  • git revert ์ปค๋ฐ‹ํ•ด์‹œ : ์ปค๋ฐ‹ํ•ด์‹œ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๋˜, ์ทจ์†Œํ•œ ์ปค๋ฐ‹๊นŒ์ง€ ๋‚จ๊ฒจ ๋‘ .

    • ์ปค๋ฐ‹ํ•ด์‹œ : "์ทจ์†Œํ•  ์ปค๋ฐ‹ํ•ด์‹œ"๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • revert ์‚ฌ์šฉ ์‹œ ๊ธฐ๋ณธ ํŽธ์ง‘๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

    • revertํ•˜๋ฉด์„œ ์ถ”๊ฐ€๋กœ ๋‚จ๊ฒจ๋‘˜ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค
    • ์‚ฌ์šฉ ํ›„ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ : Revert ์ปค๋ฐ‹๋ฉ”์‹œ์ง€
  • revert๋Š” ๊ธฐ์กด ์ปค๋ฐ‹์„ ์ง€์šฐ๋Š” ๋Œ€์‹ , ๋ณ€๊ฒฝ์ด๋ ฅ์„ ์ทจ์†Œํ•œ ์ƒˆ ์ปค๋ฐ‹์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.