ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Git

Git ํŒŒํ—ค์น˜๊ธฐ

sodait 2021. 6. 13. 01:00

๐Ÿ”จ Git

์ฝ”๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ(ํˆด), ๋ฒ„์ „์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ

Git์˜ ๋ชฉ์ 

1) ๋ฒ„์ „ ๊ด€๋ฆฌ
2) ๋™์‹œ ํ˜‘์—…
3) ๋ฐฑ์—…

๋ฒ„์ „ ๊ด€๋ฆฌ?

ํŒŒ์ผ์˜ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ๊ธฐ๋กํ–ˆ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ํŠน์ • ์‹œ์ ์— ๋ฒ„์ „์„ ๋‹ค์‹œ ๊บผ๋‚ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ

๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์žฅ์ 

1) ์ง€๋‚œ ๊ณผ์ • ํ™•์ธ ๊ฐ€๋Šฅ
2) ์–ธ์ œ๋“  ์ด์ „ ๋ฒ„์ „์˜ ์ฝ”๋“œ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ
3) ๊ฐœ๋ฐœ์ž๋ผ๋ฆฌ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์Œ
์ˆ˜์ • ์‹œ, ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ

๐Ÿ’ปGitHub

Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ ค๋‘˜ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ
- ์™ธ๋ถ€ ์ปดํ“จํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋งˆ๋ จํ•˜์ง€ ์•Š์•„๋„ ์ž‘์—…ํ•œ ๋‚ด์šฉ(๋ฐฑ์—…๋ณธ)์„ ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅ ๊ฐ€๋Šฅ
- ์™ธ๋ถ€์— ์ปดํ“จํ„ฐ๋ฅผ ๋Œ€์‹  ๋งŒ๋“ค์–ด์ฃผ๋Š” ์„œ๋น„์Šค (์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋Œ€์‹  ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค)
=> ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ํ˜‘์—… ๊ฐ€๋Šฅ


1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ(repository)

์ €์žฅ์†Œ
์ปค๋ฐ‹์ด ์ €์žฅ๋˜๋Š” ์žฅ์†Œ, ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฐ ๋ฒ„์ „์ด ๋‹ด๊ธฐ๋Š” ์ €์žฅ์†Œ
ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์ด ๋ฒ„์ „๋ณ„๋กœ ์ €์žฅ โ†’ .git ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง โ†’ ์ด๋ฅผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ผ๊ณ  ํ•จ

2. ์ปค๋ฐ‹(commit)

๋ฌด์–ธ๊ฐ€๋ฅผ ํ–‰ํ•˜๋‹ค, ๊ธฐ๋กํ•˜๋‹ค
ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŠน์ • ๋ชจ์Šต์„ ํ•˜๋‚˜์˜ ๋ฒ„์ „์œผ๋กœ ๋‚จ๊ธฐ๋Š” ๋™์ž‘(ํ–‰์œ„ & ๊ฒฐ๊ณผ๋ฌผ)
- ์ปค๋ฐ‹ํ•˜๋Š” ๋‹น์‹œ์˜ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ์Šต์ด ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅ๋จ(๊ทธ ๊ณ ์ •๋œ ๊ฒฐ๊ณผ๋ฌผ ์ž์ฒด๋„ ์ปค๋ฐ‹์ด๋ผ ํ•จ)
- ์ปค๋ฐ‹์„ ํ†ตํ•ด์„œ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ
- ๊ณผ๊ฑฐ์˜ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Œ


[Git์˜ 3๊ฐ€์ง€ ์ž‘์—… ์˜์—ญ]

1. working directory (=working tree)

์ž‘์—…์„ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ

2. staging area (=index)

git addํ•œ ํŒŒ์ผ๋“ค์ด ์กด์žฌํ•˜๋Š” ์˜์—ญ
- working directory ์•ˆ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ git addํ•˜๋ฉด ๊ทธ ํŒŒ์ผ๋“ค์ด staging area์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ , ์ดํ›„ ์ปค๋ฐ‹ํ•˜๋ฉด staging area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋งŒ ์ปค๋ฐ‹์— ๋ฐ˜์˜ -> ์›ํ•˜๋Š” ๊ฒƒ๋“ค๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ์ปค๋ฐ‹์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ

3. repository

์ปค๋ฐ‹๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์˜์—ญ (working directory์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ๋“ค ์ €์žฅ)
-> ์ปค๋ฐ‹ ์‹œ, ์Šค๋ƒ…์ƒท(snapshot)์ฒ˜๋Ÿผ repository์— ์ €์žฅ


โœจGit ์‚ฌ์šฉํ•˜๊ธฐ

git init ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ git์ด ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์„ค์ •ํ•˜๊ณ  ๊ทธ ์•ˆ์— ๋ ˆํฌ์ง€ํ† ๋ฆฌ(.git) ์ƒ์„ฑ

=> ์ด์ œ Git์œผ๋กœ ๋ฒ„์ „๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Œ

โ—[์ฒซ Commit์„ ํ•˜๊ธฐ ์ „์— ๊ผญ ํ•ด์•ผํ•  ๊ฒƒ]

=> git์—๊ฒŒ commitํ•œ ์‚ฌ๋žŒ ์•Œ๋ ค์ฃผ๊ธฐ(๊ฐ•์ œ)

1) ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์ฃผ์†Œ ์„ค์ •

git config configure ์„ค์ •ํ•˜๋‹ค, ๊ตฌ์„ฑํ•˜๋‹ค

git config user.name "sodait"
git config user.email "sodait@email.com"
=> ์ปค๋ฐ‹ ์‹œ, ์ปค๋ฐ‹์— ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋„ ํ•จ๊ป˜ ์ €์žฅ

2) ์ปค๋ฐ‹ํ•  ํŒŒ์ผ git add๋กœ ์ง€์ •ํ•ด์ฃผ๊ธฐ

git add hello.js
์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์—๋Š” ์ปค๋ฐ‹ํ•  ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์ค˜์•ผ ํ•จ (์ˆ˜์ •๋œ ํŒŒ์ผ์˜ ๋ชจ์Šต์ด ์ปค๋ฐ‹์— ํฌํ•จ๋  ๊ฒƒ์ด๋ผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ)

3) ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ๋‚จ๊ธฐ๊ธฐ(์˜ต์…˜ -m)

git commit -m "์ปค๋ฐ‹์— ๊ด€ํ•œ ์ •๋ณด"


git status ์ƒํƒœ
๊นƒ์ด ์ธ์‹ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ

stage: git add๋กœ ํŒŒ์ผ์„ staging area์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ
(๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์žˆ์—ˆ์ง€๋งŒ git add๋ฅผ ํ•ด ์ฃผ์ง€ ์•Š์•„ staging area์— ์ถ”๊ฐ€๋˜์ง€๋Š” ์•Š์€ ํŒŒ์ผ)


ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ๋“ค ํ•œ ๋ฒˆ์— staging area์— ์ถ”๊ฐ€
git add .

git reset [ํŒŒ์ผ ์ด๋ฆ„] : ์ดˆ๊ธฐํ™”ํ•˜๋‹ค git add ์ทจ์†Œํ•˜๊ธฐ (staging area์— ์˜ฌ๋ ธ๋˜ ํŒŒ์ผ ๋‹ค์‹œ ๋‚ด๋ฆฌ๊ธฐ)


๋ฆฌ๋ชจํŠธ(Remote) ๋ ˆํฌ์ง€ํ† ๋ฆฌ / ๋กœ์ปฌ(Local) ๋ ˆํฌ์ง€ํ† ๋ฆฌ

์ž‘์—…ํ•˜๋˜ ๋‚ด์šฉ ์ „์†ก์„ = ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ „์†ก์ด๋ผ๊ณ  ํ•จ

- github์—์„œ ๋งŒ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ = ๋ฆฌ๋ชจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(Remote Repository) ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ
- ๋‚ด ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ = ๋กœ์ปฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(Local Repository)

Remote Repository ์‚ฌ์šฉ ์ด์œ 

1) ์•ˆ์ „์„ฑ (๋กœ์ปฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์—†์–ด์กŒ์„ ๊ฒฝ์šฐ ๋ณต์› ๊ฐ€๋Šฅ)
2) ํ˜‘์—… ๊ฐ€๋Šฅ (๋ฆฌ๋ชจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋‚ด์šฉ ์ถ”๊ฐ€ ํ›„ ๋‹ค์‹œ ์ปค๋ฐ‹ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ ์˜ˆ์‹œ
- GitHub ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜
- ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ ๋ฆฌ๋ชจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ๋กœ ๊ฐ€์ ธ๊ฐ€์„œ ์ˆ˜์ •ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ๋ฆฌ๋ชจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— git pushํ•œ ๊ฒฝ์šฐ


git push : ๋ฐ€๋‹ค, ๋ฐ€์–ด๋„ฃ๋‹ค Local ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋‚ด์šฉ์„ โ†’ Remote ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ณด๋‚ด๊ธฐ
git pull : ์žก์•„๋‹น๊ธฐ๋‹ค Remote ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ โ†’ ์ž์‹ ์˜ Local ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๊ฐ€์ ธ์˜ค๊ธฐ

cat README.md : ์ถœ๋ ฅ

git clone [ํ”„๋กœ์ ํŠธ์˜ GitHub์ƒ ์ฃผ์†Œ] : ๋ณต์ œํ•˜๋‹ค ๊นƒํ—ˆ๋ธŒ ํ”„๋กœ์ ํŠธ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์ œ


git log ๊ธฐ๋ก, ์ผ์ง€ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์ถœ๋ ฅ
์ปค๋ฐ‹ ์•„์ด๋””(=์ปค๋ฐ‹ ํ•ด์‹œ) / ์ปค๋ฐ‹ํ•œ ์‚ฌ๋žŒ / ์ปค๋ฐ‹ํ•œ ๋‚ ์งœ / ์ปค๋ฐ‹๋ฉ”์‹œ์ง€


git log --pretty=online ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ํ•œ ์ค„์— ๊น”๋”ํ•˜๊ฒŒ ๋ณด๊ธฐ (--pretty ๋‹ค์Œ =online์€ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜)


git show [์ปค๋ฐ‹์•„์ด๋””] (์•ž 4์ž๋ฆฌ์ •๋„๊นŒ์ง€๋งŒ ์ณ๋„ ๋จ) : ํ•ด๋‹น ์ปค๋ฐ‹์— ์–ด๋–ค ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธ (ํ•ด๋‹น ์ปค๋ฐ‹๊ณผ ๋ฐ”๋กœ ์ด์ „ ์ปค๋ฐ‹์˜ ์ฐจ์ด์  ๋ณด์—ฌ์คŒ)

git commit --amend ์ˆ˜์ •ํ•˜๋‹ค, ๊ณ ์น˜๋‹ค ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹ ์ˆ˜์ •ํ•˜๊ธฐ(โ†’ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” vim์ฐฝ ๋œธ)
git diff [์ปค๋ฐ‹ A ์•„์ด๋””] [์ปค๋ฐ‹ B ์•„์ด๋””] ๋‘ ์ปค๋ฐ‹๊ฐ„์˜ ์ฐจ์ด ๋ณด๊ธฐ


HEAD : ๋ณดํ†ต ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ•œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ด(๋งค๋ฒˆ ๋” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ๊ฐ€๋ฆฌํ‚ด)
HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹์— ๋”ฐ๋ผ working directory ๊ตฌ์„ฑ


branch ๋ธŒ๋žœ์น˜

๋‚˜๋ญ‡๊ฐ€์ง€ ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๊ด€๋ฆฌ ํ๋ฆ„
ex) ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๋‘ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ(๋‘ ๊ฐ€์ง€ ๋ฒ„์ „ ex.์œ ๋ฃŒ/๋ฌด๋ฃŒ)

๋งจ ์ฒ˜์Œํ•˜๋Š” ์ปค๋ฐ‹(original) = root(๋ฟŒ๋ฆฌ) commit

On branch master ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜ ์œ„์— ์žˆ๋‹ค => ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ปค๋ฐ‹ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ๊ธฐ๋Š” ๋ธŒ๋žœ์น˜(๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜)

git branch [๋งŒ๋“ค๊ณ ์‹ถ์€ ๋ธŒ๋žœ์น˜ ๋ช…] ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ
git checkout [๊ฐ€๊ณ ์‹ถ์€ ๋ธŒ๋žœ์น˜๋ช…] ๋ธŒ๋žœ์น˜ ์ด๋™ํ•˜๊ธฐ



๋Œ“๊ธ€