Skip to content

oojahooo-classroom/Git-GitHub-Tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 

Repository files navigation

Git-GitHub-Tutorial

Git & GitHub Tutorial for Individual Project

Clone Me!

Clone์€ GitHub์˜ repo๋ฅผ ๊ฐ€์ ธ์™€ ์ž‘์—…ํ•  ์ค€๋น„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ์ปค๋งจ๋“œ์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ์ด repo๋ฅผ ์ž์‹ ์˜ working directory์— local repo๋กœ ๋ณต์ œํ•ด ๋ณด์„ธ์š”:

git clone [link of this repository]
cd [repository directory]

Diff, Status

์ด์ œ ๋ณต์ œํ•œ repo๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค!

์ด README.md ํŒŒ์ผ์˜ ์•„๋ž˜ ๋ธ”๋Ÿญ ๋ถ€๋ถ„์— ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์„ธ์š”:

์•„๋ž˜ ๋ถ€๋ถ„์— ๋งˆ์Œ๊ป ๊ธ€์„ ์ ์–ด ๋ณด์„ธ์š”



์œ„ ๋ถ€๋ถ„์— ๋งˆ์Œ๊ป ๊ธ€์„ ์ ์–ด ๋ณด์„ธ์š”

์ง€๊ธˆ ์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์ด local repo์˜ ํ˜„์žฌ commit๊ณผ ์–ผ๋งŒํผ ๋‹ค๋ฅธ์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด, ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•ด ๋ณด์„ธ์š”:

git diff

๋งŒ์•ฝ ํŠน์ • ํŒŒ์ผ์ด๋‚˜ ํด๋”์— ๋Œ€ํ•ด์„œ๋งŒ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์œ„ ์ปค๋งจ๋“œ์˜ ๋’ค์— ์›ํ•˜๋Š” ํŒŒ์ผ ๋˜๋Š” ํด๋” ์ด๋ฆ„์„ ์ถ”๊ฐ€๋กœ ๋„ฃ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์ด ์•„๋‹Œ, ์–ด๋–ค ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ๊ณ  ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์‚ญ์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์˜ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•ด ๋ณด์„ธ์š”:

git status

์ด ๋•Œ git์€ local repo์˜ ํ˜„์žฌ commit์„ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ working directory์—์„œ ์–ด๋–ค ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ์ˆ˜์ •๋˜์—ˆ๊ณ , ์‚ญ์ œ๋˜์—ˆ๋Š”์ง€ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ README.md ํŒŒ์ผ๋งŒ ์ˆ˜์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

Add - Commit - Push

๋ฏธ๋ จ ์—†์ด ๊ธ€์„ ์ „๋ถ€ ์ผ๋‹ค๋ฉด, ์ด์ œ ์ด ์ˆ˜์ •์‚ฌํ•ญ์„ commit์œผ๋กœ ๋‚จ๊ฒจ ์ €์žฅํ•ด ๋ด…์‹œ๋‹ค.

์ž์‹ ์˜ ์ž‘์—… ๊ณต๊ฐ„(working directory)์—์„œ ์ƒˆ๋กœ ์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์„ local repo์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„ , ์ผ๋‹จ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์˜ ์—ญํ• ์„ ํ•˜๋Š” staging area์— ์ˆ˜์ •ํ•œ ํŒŒ์ผ(๋˜๋Š” ์ผ๋ถ€๋ถ„)์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‹คํ–‰ํ•ด README.md ํŒŒ์ผ์„ stage์‹œ์ผœ ๋ด…์‹œ๋‹ค:

git add README.md

๋งŒ์•ฝ README.md ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ๊ณ , ๋ชจ๋“  ์ˆ˜์ •์‚ฌํ•ญ์„ ํ•œ ๋ฒˆ์— stage์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„ ์ปค๋งจ๋“œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  -A ์˜ต์…˜์„ ๋„ฃ์–ด ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ README.md๋Š” ์ง€๊ธˆ๊นŒ์ง€์˜ ์ˆ˜์ •์‚ฌํ•ญ ๊ทธ๋Œ€๋กœ staging area์— ๋‹ด๊ฒจ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด ๋•Œ git status๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๋ฉด, Changes to be committed: ๋ชฉ๋ก์— README.md ํŒŒ์ผ์ด ์ƒ๊ฒผ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ stage์‹œํ‚จ ์ˆ˜์ •์‚ฌํ•ญ์„ local repo์— ์‹ค์ œ๋กœ commitํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‹คํ–‰ํ•ด stage๋œ ์ˆ˜์ •์‚ฌํ•ญ์„ commitํ•ด ๋ณด์„ธ์š”:

git clommit -m "[commit message]"

์ด์ œ ๋‹น์‹ ์˜ local repo์—๋Š” ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒˆ๋กœ์šด commit์œผ๋กœ ๋ฐ˜์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•ด ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด git log๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ๋˜๋Š” ๋ชฉ๋ก์€ local repo ๊ธฐ์ค€ commit ์ด๋ ฅ์ด๋ฉฐ, ๋ฐฉ๊ธˆ ์ƒˆ๋กœ commitํ•ด์ค€ ๊ฒƒ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” commit์— HEAD๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ทธ ๋‹ค์Œ commit์— origin/main, origin/HEAD๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ’€์–ด์„œ ๋ณด์ž๋ฉด, ๊ฐ€์žฅ ์œ„ commit์€ ๋ฐฉ๊ธˆ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— local repo ๊ธฐ์ค€์œผ๋กœ main ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ commit์ด ๋ฐ”๋€Œ์—ˆ๊ณ , HEAD๋Š” ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง remote repo์—๋Š” ์ด ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, remote repo์˜ ๋ณ„๋ช…์ธ origin์˜ main ๋ธŒ๋žœ์น˜์™€ origin์˜ HEAD๋Š” ๊ทธ ์ด์ „ commit์— ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋‹น์‹ ์€ ์ด๋ฏธ git์˜ ๊ตฌ์กฐ๋ฅผ ์ž˜ ํŒŒ์•…ํ•˜๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค! ๋ฌผ๋ก  ๋ฐ”๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„, ๋‚™๋‹ดํ•˜์ง€ ๋งˆ์„ธ์š”. ๋งŒ์•ฝ ๊น€์žฌํ˜ธ ํŠœํ„ฐ์˜ Git & GitHub ์Šคํ„ฐ๋””๋ฅผ ๋“ฃ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, pdf ์ž๋ฃŒ์— ๊ทธ๋ฆผ์œผ๋กœ ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!

์ด์ œ ๋“œ๋””์–ด remote repo์— ์ˆ˜์ •์‚ฌํ•ญ์„ ๋ฐ˜์˜์‹œ์ผœ๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ local repo์˜ commit ์ด๋ ฅ์„ remote repo์— ๋ฐ˜์˜์‹œ์ผœ ๋ณด์„ธ์š”:

git push origin main

๋ฌผ๋ก  ์ง€๊ธˆ์€ origin์ด๋ผ๋Š” ์ด๋ฆ„์˜ remote repo์˜ main์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜์— pushํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์œ„ ์ปค๋งจ๋“œ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋งŒ์•ฝ remote repo๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ์„œ ๋‹ค๋ฅธ ๋ณ„๋ช…์„ ์ง€์–ด์คฌ๋‹ค๊ฑฐ๋‚˜, ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ์ด๋ฆ„์ด ๋‹ค๋ฅด๋‹ค๋ฉด origin main๋ถ€๋ถ„์ด ๋ฐ”๋€Œ์–ด์•ผ๊ฒ ์ฃ ?

์ด์ œ GitHub์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ณต์ œํ•ด ์™”๋˜ remote repo ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ์ ‘์†ํ•˜๋ฉด(์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด), ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ˆ˜์ •์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์–ด ์žˆ์œผ๋ฉฐ commit ์ด๋ ฅ์ด ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค!

๋˜ ์—ฌ๊ธฐ์„œ ํ•œ ๊ฐ€์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ๋ถ€๋ถ„์€, commit์ด ์‹ค์ œ๋กœ ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์€ git commit ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์›ํ•œ๋‹ค๋ฉด ์–ด๋А ์ •๋„ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์กŒ์„ ๋•Œ๋งˆ๋‹ค ์ž์ฃผ commitํ•ด์ฃผ๋ฉด์„œ ๊ทธ๋•Œ๊ทธ๋•Œ์˜ ๊ธฐ๋ก์„ local repo์— ์Œ“์•„ ๋‘๊ณ , ์ž‘์—…์ด ๋งŽ์ด ์ง„์ „๋˜์—ˆ๋‹ค ์‹ถ์„ ๋•Œ(์ €์˜ ๊ฒฝ์šฐ ๋ฐฅ ๋จน์œผ๋Ÿฌ ๊ฐ€๊ฑฐ๋‚˜ ํ‡ด๊ทผํ•˜๊ธฐ ์ „์—) push๋ฅผ ํ•ด์ค˜๋„ ๋ฉ๋‹ˆ๋‹ค.

.gitignore

์‚ฌ์‹ค ์ง€๊ธˆ์˜ repo๋Š” README.md๊ฐ€ ์ „๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ๊ฐํฅ์ด ์—†๊ฒ ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๊ณ  ๋นŒ๋“œ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก, ๋˜ ์—ฌ๋Ÿฌ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์ผ์ˆ˜๋ก repo์— ๊ตณ์ด ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์•˜์œผ๋ฉด ํ•˜๋Š” ํŒŒ์ผ๋“ค์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, C์–ธ์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ *.c ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ object file์ด ํ•˜๋‚˜ ํŠ€์–ด๋‚˜์˜ฌ ๊ฒ๋‹ˆ๋‹ค. ์ด๋Š” ๋ณดํ†ต ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด a.out์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ์‹คํ–‰ํŒŒ์ผ์€ ์‚ฌ์‹ค ๊ตณ์ด ์šฐ๋ฆฌ์˜ repo์— ๊ธฐ๋ก๋˜์–ด ์•ˆ ๊ทธ๋ž˜๋„ ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๊ฒƒ๋ณด๋‹จ, ๊ทธ๋ƒฅ working dir์—๋งŒ ๋‚จ๊ฒจ๋‘๊ณ  add, commit, push๋ฅผ ํ•  ๋•Œ ๋ฌด์‹œํ•ด ๋ฒ„๋ฆฌ๋Š” ๊ฒŒ ๋‚ซ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ์— .gitignore๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ๊ทธ ํŒŒ์ผ์— ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ๋‚˜์—ดํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ ํ•ด๋ด…์‹œ๋‹ค.

์ง€๊ธˆ ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ์— ignore_test ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ, ๋‚ด์šฉ์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ฑ„์›Œ ์ฃผ์„ธ์š”. ์ด ๋•Œ git status๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋‹น์—ฐํžˆ ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ignore_testํŒŒ์ผ์ด ์ถ”๊ฐ€๋œ ํŒŒ์ผ ๋ชฉ๋ก์— ๋œฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ์— .gitignore ํŒŒ์ผ์„ ๋งŒ๋“  ๋’ค, ignore_test๋ผ๊ณ  ์ ๊ณ  ์ €์žฅํ•ด ์ค์‹œ๋‹ค. ์ดํ›„ git add .gitignore, git commit -m "update .gitignore"์„ ์‹คํ–‰ํ•œ ๋’ค, ๋‹ค์‹œ git status๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”. ๋†€๋ž๊ฒŒ๋„ ignore_testํŒŒ์ผ์€ ๋” ๊ฐ์‹œ๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๋Š” ๋ณ„๋กœ ๊ธฐ๋กํ•ด ๋‘๊ณ  ์‹ถ์ง€ ์•Š์€ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๊ธฐ ํŒŒ์ผ๋“ค(๋Œ€ํ‘œ์ ์œผ๋กœ .DS_Store, *.o, *.out, .vscode, .idea ๋“ฑ์ด ์žˆ์ฃ )์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

Pull or Fetch/Merge

์ง€๊ธˆ์€ ํ•˜๋‚˜์˜ ์žฅ์น˜, ํ•˜๋‚˜์˜ working directory์—์„œ ์ž‘์—…ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค ๋‚ด๊ฐ€ ๊ณง ๋ฒ•์ด๊ณ  ์ˆ˜์ •์‚ฌํ•ญ์˜ ์ „๋ถ€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Git๊ณผ GitHub๋Š” ์‚ฌ์‹ค ์ฒดํฌํฌ์ธํŠธ ์ƒ์„ฑ๊ธฐ ๊ทธ ์ด์ƒ๋„ ์ดํ•˜๋„ ์•„๋‹ ๊ฒ๋‹ˆ๋‹ค. ํŠน์ • ์ƒํ™ฉ์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๋ฐ์— ์กฐ๊ธˆ ๋” ํŠนํ™”๋œ ์›Œ๋“œํ”„๋กœ์„ธ์„œ์™€ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด์ฃ .

๊ทธ๋Ÿฌ๋‚˜, Git๊ณผ GitHub์˜ ์ง„์งœ ์ง„๊ฐ€๋Š” ์—ฌ๋Ÿฌ ์žฅ์น˜, ์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์˜ฎ๊ฒจ๋‹ค๋‹ˆ๋ฉฐ ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ์ผ์ด ์žˆ๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ํ˜‘์—…ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์‹ค์ œ๋กœ ํ˜‘์—…์„ ํ•˜๊ฒŒ ๋˜๋Š” ํฐ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๋ฅผ ๋‘๊ณ  (์ดํ›„ ์—ฐ์Šตํ•˜๊ฒŒ ๋ ) Pull Request๋ฅผ ๋‚ ๋ฆฌ๊ฒŒ๋” ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์ง€๋งŒ, ์ผ๋‹จ ๊ฐœ์ธ repo๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์žฅ์น˜๋ฅผ ์˜ฎ๊ฒจ๋‹ค๋‹ˆ๋ฉฐ ์ž‘์—…ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ์ •ํ•ด ๋ด…์‹œ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…ํ•˜๋˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ž ์‹œ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๋‹ค๋ฅธ (์กฐ๊ธˆ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„) ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ์ฐพ์•„ ์ด remote repo๋ฅผ ๋‹ค์‹œ cloneํ•ด๋ด…์‹œ๋‹ค! ๋ฐฉ๋ฒ•์€ ์œ„์—์„œ ํ•ด๋ดค์œผ๋‹ˆ ์ด์ œ ์ž˜ ์•Œ๊ฒ ์ฃ ?

์ด์ œ ์ƒˆ๋กœ cloneํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ, ์•„๋ž˜ ๋ธ”๋Ÿญ์— ์›ํ•˜๋Š” ๋Œ€๋กœ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ด…์‹œ๋‹ค:

์•„๋ž˜ ๋ถ€๋ถ„์— ๋งˆ์Œ๊ป ๊ธ€์„ ์ ์–ด ๋ณด์„ธ์š”



์œ„ ๋ถ€๋ถ„์— ๋งˆ์Œ๊ป ๊ธ€์„ ์ ์–ด ๋ณด์„ธ์š”

์›ํ•˜๋Š” ๋งŒํผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด, ์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ add, commit, push๋ฅผ ํ•ด๋ด…์‹œ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ remote repo์—๋„ ๊ฐ€์žฅ ์ตœ์‹  ์ˆ˜์ •์‚ฌํ•ญ๊นŒ์ง€ ๋ฐ˜์˜๋˜์–ด ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” ๋‹ค์‹œ ์ด์ „์— ์ž‘์—…ํ•˜๋˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋Œ์•„๊ฐ€ ๋ณผ๊นŒ์š”? ์•„๋งˆ ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „ ์ž‘์—… ๊ทธ๋Œ€๋กœ ์•„๋ฌด ์ง“๋„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, git log๋ฅผ ํ•ด๋ด๋„ ์ตœ์‹  commit์ด ์กด์žฌํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ ๋ฉ๊ทธ๋Ÿฌ๋‹ˆ ๋‚จ๊ฒจ์ ธ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

์ด์ œ ์ด ๋””๋ ‰ํ† ๋ฆฌ์˜ local repo๋ฅผ ๋‹ค์‹œ ๊ฐ€์žฅ ์ตœ์‹  commit์œผ๋กœ ๋™๊ธฐํ™”ํ•ด ๋ด…์‹œ๋‹ค. ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ remote repo์˜ commit ์ด๋ ฅ์„ local repo์— ๋™๊ธฐํ™”ํ•ด ๋ณด์„ธ์š”:

git pull

์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ, remote repo์˜ commit ์ด๋ ฅ์ด local repo์— ๋™๊ธฐํ™” ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ด์ œ ์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ๋‹ค์‹œ ์ž‘์—…์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ด๋„ ์ง€๊ธˆ๊นŒ์ง€ remote repo์— ๋ฐ˜์˜๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์ž‘์—…์„ ์ด์–ด์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*์ฃผ์˜: ๋งŒ์•ฝ pull์„ ์‹œ๋„ํ•˜๋ ค๋˜ ๊ณณ์—์„œ stage๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ˆ˜์ • ์ด๋ ฅ์ด ์žˆ๊ฑฐ๋‚˜, ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ local repo์—๋งŒ ์กด์žฌํ•˜๋Š” commit ์ด๋ ฅ์ด ์žˆ๋‹ค๋ฉด ์ถฉ๋Œ(conflit)์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ด ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์›ฌ๋งŒํ•˜๋ฉด ๊ฐ ์ž‘์—…๊ณต๊ฐ„์„ ๋ฐ”๋กœ๋ฐ”๋กœ ์ตœ์‹ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ, ํ˜‘์—… ๊ณผ์ •์—์„œ๋‚˜ ํ˜น์€ ์—ฌ๋Ÿฌ ์ƒํ™ฉ์—์„œ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋‹ค๋ฅธ local repo๊ฐ€ pushํ•œ ๊ฒƒ์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ push์—์„œ ๋‚ญํŒจ๋ฅผ ๋ณด๊ณ , ์ด์ œ๋ผ๋„ pullํ•˜์ž๋‹ˆ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์–ด ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ •๋ง์ •๋ง ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ณ ๊ธ‰ ์Šคํ‚ฌ๋“ค์ด ์ค€๋น„๋˜์–ด ์žˆ๋Š”๋ฐ, ์˜ค๋Š˜ ์Šคํ„ฐ๋””์—์„œ๋Š” ๊ทธ ์ข…๋ฅ˜๋งŒ ํ›‘์–ด๋ณด๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•ฉ์‹œ๋‹ค.

git fetch

์œ„ ์ปค๋งจ๋“œ๋Š” pull ๊ณผ์ •์—์„œ remote repo๋ฅผ local repo๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ๊นŒ์ง€๋งŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ pull์˜ ์ „๋ถ€๊ฐ€ ์•„๋‹Œ๊ฐ€? ํ•˜๊ณ  ์ฐฉ๊ฐํ•˜์‹ค ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ local repo์— ๋ฐ˜์˜๋˜์—ˆ๋‹ค๊ณ  ํ˜„์žฌ ์ž‘์—…์ค‘์ด๋˜ workin directory์— ์‹ค์ œ๋กœ ์ตœ์‹  commit๋Œ€๋กœ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์ง€๋Š” ์•Š์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์ดํ›„ ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ˜„์žฌ ์ˆ˜์ •ํ•˜๋˜ ์‚ฌํ•ญ๊ณผ ์ตœ์‹  commit์„ ์ˆ˜๋™์œผ๋กœ ๋ณ‘ํ•ฉ์‹œ์ผœ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค:

git merge

์‚ฌ์‹ค ์œ„ ๋‘ ์ปค๋งจ๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์ง„ํ–‰ํ•˜๋Š” ๊ฒŒ git pull์ผ ๋ฟ์ž…๋‹ˆ๋‹ค!

๋˜๋Š”, ๋‹ค์Œ์˜ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ์ž‘์—…์ค‘์ด๋˜ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋‚˜๋งŒ์˜ ๊ณต๊ฐ„(์Šคํƒ)์— ์ž ์‹œ ํ‚ตํ•ด ๋‘˜ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

git stash

์ดํ›„ git pull์„ ์ง„ํ–‰ํ•˜๊ณ , ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋˜ ์‚ฌํ•ญ์„ ๋‹ค์‹œ ๊บผ๋‚ด์™€ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค:

git apply

Congratulations!!!

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๋‹น์‹ ์€ ์ด์ œ Git & GitHub์˜ ์ฒซ ๋ฐœ์„ ๋—์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ์•ž์œผ๋กœ ๋” ๋งŽ์€ ๊ณ ๋‚œ๊ณผ ์—ญ๊ฒฝ์ด ์žˆ๊ฒ ์ง€๋งŒ, Git๊ณผ GitHub๋Š” ๋‹น์‹ ์˜ ๋“ ๋“ ํ•œ ๋™๋ฐ˜์ž๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Advanced Skills

ํ˜น์‹œ ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ๋“ค์„ ์ด๋ฏธ ๋‹ค ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค๋„ ์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

  • git rebase๋Š” merge ๋Œ€์‹  ํ™œ์šฉํ•˜์—ฌ commit ์ด๋ ฅ์ด ๋”๋Ÿฌ์›Œ์ง€์ง€ ์•Š๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์ง์ ‘ ์ฐพ์•„๋ณด๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.
  • git checkout์„ ํ†ตํ•ด unstaged ์ƒํƒœ์˜ ํŠน์ • ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ˜„์žฌ local repo๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” commit์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜, local repo๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” commit ์ž์ฒด๋ฅผ ๋‹ค๋ฅธ commit์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด -b [branch name]์„ ์ถ”๊ฐ€ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ์›ํ•˜๋Š” ์ด๋ฆ„์˜ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • git remote add๋ฅผ ํ†ตํ•ด ํ•ด๋‹น local repo์™€ ์—ฐ๊ฒฐ๋œ remote repo๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” remote repo์˜ ์ข…๋ฅ˜๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด git remote -v๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
  • git log์—๋Š” ์ •๋ง ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. -n1 ์˜ต์…˜์€ local repo๊ฐ€ ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” commit์—์„œ๋ถ€ํ„ฐ 1๊ฐœ์˜ commit ์ด๋ ฅ๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ฌผ๋ก  -n10๊ณผ ๊ฐ™์ด 10๊ฐœ๋งŒ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. --pretty=format"%P" ์˜ต์…˜์€ commit ์ด๋ ฅ์„ ๊ฐ๊ฐ์˜ ๋ถ€๋ชจ commit๋“ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ ๋ฌด๊ถ๋ฌด์ง„ํ•œ ์˜ต์…˜๋“ค์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ข‹์€ ์ผ์ด ์ƒ๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • git bisect๋ผ๋Š” ์ปค๋งจ๋“œ๋„ ์žˆ๋Š”๋ฐ, ์•„๋งˆ ์›ฌ๋งŒํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ผ์€ ์—†๊ฒ ์ง€๋งŒ, ์‰ฝ๊ฒŒ ๋งํ•ด git์˜ commit ์ด๋ ฅ๋“ค์„ binary search, ์ฆ‰ ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

About

Git & GitHub Tutorial for Individual Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published