lil.dev
Published on

๐ŸŽ‰ Git(2)-๋“œ๋ฆผ์ฝ”๋”ฉ ์œ ํˆฌ๋ธŒ ๊ฐ•์˜ ์ •๋ฆฌ

๊ธ€์“ด์ด

    ๐Ÿ“Œ ๋ชฉ์ฐจ

    Welcome

    part2.Basic

    1. git workflow
    2. git add
    3. git ignore
    4. git status
    5. git diff
    6. git commit

    1. git workflow

    git์—๋Š” ํฌ๊ฒŒ ์ด 3๊ฐ€์ง€์˜ ์ž‘์—… ํ™˜๊ฒฝ์ด ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค.

    • working directory : ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ณณ
    • staging area : ๋ฒ„์ ผ ํžˆ์Šคํ† ๋ฆฌ์— ์ €์žฅ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์˜ฎ๊ฒจ ๋†“๋Š” ๊ณณ
    • .git directoroy : commit๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ํŒŒ์ผ์„ ์ €์žฅํ•ด๋‘๋Š” ๊ณณ

    .git directory์— ์ €์žฅ๋œ ๋ฒ„์ ผ๋“ค์€ check out์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์–ธ์ œ๋“ ์ง€ ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ณดํ†ต ๋‚ด ์ปดํ“จํ„ฐ์—๋งŒ ์ €์žฅ๋˜๊ธฐ๋•Œ๋ฌธ์—, push๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๋‚˜์˜ git directory๋ฅผ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•ด๋‘”๋‹ค. ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ๋‚ด ์ปดํ“จํ„ฐ์— ๋‹ค์šด๋กœ๋“œํ•  ๋•Œ๋Š” pull์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๋‹ค์šด๋ฐ›๋Š”๋‹ค.

    ๊ฐ๊ฐ์˜ commit๋“ค์€ snapshot๋œ ์ •๋ณด๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์œ ํ•œ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ๋ถ€๊ฐ€๋œ๋‹ค.์ด ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ด commit์—๋Š” id๋ฟ ์•„๋‹ˆ๋ผ ๋ฒ„์ „์— ๊ด€๋ จ๋œ ๋ฉ”์‹œ์ง€,์ €์ž,๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋„ ํ•จ๊ป˜ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

    working directory
    • untracked์™€ tracked๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.
    • git์ด ํŠธ๋ž™ํ‚นํ•˜๋Š” ํŒŒ์ผ์ด๋ฉด tracked, ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ์ด๋‚˜ ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊นƒ์„ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๊นƒ์ด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์–ด untracked๋œ๋‹ค.
    • ๋˜ํ•œ tracked๋Š” ์ˆ˜์ • ์—ฌ๋ถ€์— ๋”ฐ๋ผ unmodified, modified๋กœ ๋‚˜๋‰œ๋‹ค. ์ˆ˜์ •์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์€ ์ด์ „ ๋ฒ„์ ผ์— ๋น„ํ•ด ์ˆ˜์ •์ด ์•ˆ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๊ณ , ์ˆ˜์ •์ด๋œ modifiedํŒŒ์ผ๋งŒ staging area๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

    2. git add

    ์˜ˆ์ œ)

    echo hello world! > b.txt
    echo hello world! > c.txt
    

    ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์œ„๋กœ ํ–ฅํ•˜๋Š” ๋ฐฉํ–ฅํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด์ „ ๋ช…๋ น์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ls๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ ๋งŒ๋“ค์–ด์ง„ txtํŒŒ์ผ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  git status๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ง€๊ธˆ ํ˜„์žฌ ํŒŒ์ผ๋“ค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    Gitadd image

    :์–ด๋–ค ๋ธŒ๋žœ์น˜์— ์žˆ๋Š”์ง€, ์ปค๋ฐ‹ ์—ฌ๋ถ€, ํŠธ๋ž™ํ‚น ์—ฌ๋ถ€

    ๊นƒ์ด trackingํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ผ๋“ค์„ staging area์— ์˜ฎ๊ธฐ๋ ค๋ฉด git add๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•œ๋‹ค. a.txtํŒŒ์ผ๋งŒ ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์‹œ git status๋ฅผ ์ž…๋ ฅํ•˜๋ฉด

    Gitadd-staged image

    ์ด๋ ‡๊ฒŒ ์ปค๋ฐ‹ํ•  ์ค€๋น„๊ฐ€ ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ,a.txtํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์กด์žฌํ•˜๋Š” ๋ชจ๋“  txtํŒŒ์ผ์„ staging area์— ์˜ฎ๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด git add *.txt๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. * - ์ „์ฒด๋ฅผ ์˜๋ฏธ

    ๋ชจ๋“  ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๊ณ ๋‚˜์„œ a.txtํŒŒ์ผ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด

    Gitmodified image

    ๋‹ค์‹œ git status๋ช…๋ น์„ ์ž…๋ ฅํ–ˆ์„๋•Œ modified๋œ a.txtํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    git rm --cached <file>... ์›ํ•˜๋Š” ํŒŒ์ผ์„ ์—ฌ๊ธฐ ๋„ฃ์–ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ working directory - untracked ์ƒํƒœ๋กœ ๋‚ด๋ ค๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

    git add *๋ช…๋ น์–ด๋ฅผ ์“ฐ๋ฉด git ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ git staging area๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. (์‚ญ์ œ๋œ ํŒŒ์ผ ๋นผ๊ณ ) ๊ทธ๋Ÿฐ๋ฐ git add .๋ช…๋ น์–ด๋ฅผ ์“ฐ๋ฉด ์‚ญ์ œ๋œ ํŒŒ์ผ๊นŒ์ง€ ๋ชจ๋‘ git staging area๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


    3. git ignore

    trackingํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ๋“ค, git์— ํฌํ•จํ•˜๊ณ  ์‹ถ์ง€์•Š์€ ํŒŒ์ผ๋“ค์€ git ignoreํŒŒ์ผ์— ๋„ฃ๋Š”๋‹ค.

    ๋งŒ์•ฝ .log๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ๋“ค์€ ๋ชจ๋‘ git์— ๋„ฃ๊ณ ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, echo *.log > .gitignore ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  logํŒŒ์ผ์ด gitignoreํŒŒ์ผ์— ์ถ”๊ฐ€๋œ๋‹ค.

    ๋งŒ์•ฝ'ํด๋”์ด๋ฆ„/'์„ gitignore์— ๋„ฃ์œผ๋ฉด ๊ทธ ํด๋”์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ gitignore์•ˆ์— ๋„ฃ๊ฒŒ๋œ๋‹ค.


    4. git status

    git status -h๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜๋ฉด status์— ๊ด€๋ จ๋œ ๋ชจ๋“  ์˜ต์…˜์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. status์— ์˜ต์…˜์„ ๋”ฐ๋กœ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ --long ์˜ต์…˜์ด ์ ์šฉ๋œ๋‹ค.(default)

    -s ๋กœ ์ข€๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฉด

    Git-status image

    ์ด๋Ÿฐ์‹์œผ๋กœ staging area๋Š” A, modified๋Š” M์œผ๋กœ ๋‚˜ํƒ€๋‚ด์ง€๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ๋ฐ˜์—๋Š” ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ๊ธธ๊ฒŒ ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

    tip)
    ํ„ฐ๋ฏธ๋„์—
    ์œˆ๋„์šฐ๋Š” cntrl+ k
    ๋งฅ์€ cmd + k
    ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ„ฐ๋ฏธ๋„ ์ฐฝ์ด ๊นจ๋—ํ•˜๊ฒŒ ์ง€์›Œ์ง„๋‹ค.


    5. git diff

    ์ •ํ™•ํžˆ ์–ด๋–ค ๋‚ด์šฉ์ด ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ๋ณด๋ ค๋ฉด ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ๋Š” working directory์˜ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋ณด์—ฌ์ค€๋‹ค. staged๋œ ํŒŒ์ผ๋“ค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด git diff --staged๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ git diff -h๋ฅผ ์ž…๋ ฅํ•˜๋ฉด diff์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. git diff -cache๋ช…๋ น์–ด๋Š” git diff --staged์™€ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์“ฐ์ธ๋‹ค.

    ํ…์ŠคํŠธ ์—๋””ํ„ฐ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด git config --global -e์„ ์‹คํ–‰ํ•˜๊ณ  ์—ด๋ฆฐ ์—๋””ํ„ฐ์˜ configํŒŒ์ผ์—์„œ ๋‹ค์Œ ์ด๋ฏธ์ง€์˜ [diff]์™€ [difftool "vscode"]๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค. ๊ทธ๋‹ค์Œ ํ„ฐ๋ฏธ๋„์—์„œ git difftool์„ ์ž…๋ ฅํ•˜๊ณ  y(yes)๋ฅผ ์ž…๋ ฅํ•˜๋ฉด vscode๊ฐ€ ์—ฐ๊ฒฐ๋œ๋‹ค.


    6. git commit

    ๋ฒ„์ „์„ ๋งŒ๋“ค ๋•Œ - commit ๋ช…๋ น์–ด ์‚ฌ์šฉ title๊ณผ description์„ ์ž‘์„ฑํ•œ ํ›„ commitํ•˜๋ฉด ํ•ด์‹œ์ฝ”๋“œ id์™€ title์ด ๋ณด์—ฌ์ง„๋‹ค. git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๊ธฐ์œ„ํ•ด์„œ๋Š” git log๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

    ๋ณดํ†ต์€

    git add .
    git commit -m "์ปค๋ฐ‹๋ฉ”์‹œ์ง€"
    

    ๋ฅผ ์ž…๋ ฅํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ commitํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋งŒ์•ฝ staged area์™€ working directory์— ์žˆ๋Š” ๋ชจ~๋“  ํŒŒ์ผ์„ ์ „๋ถ€ ํ•œ๋ฒˆ์— commitํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด git commit am "์ปค๋ฐ‹๋ฉ”์‹œ์ง€"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

    ๊ถŒ์žฅ๋˜๋Š” ์ปค๋ฐ‹ ๊ทœ๋ชจ

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

    ๋ณดํ†ต ํ˜„์žฌํ˜•,๋™์‚ฌ๋กœ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.