Community

๐Ÿ•Š๏ธ [Medium] ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜, Git ๊ฐ€์ด๋“œ (1)

๊ฐœ๋ฐœ์ž๋กœ์„œ ์šฐ๋ฆฌ์˜ ์ผ์ƒ์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ์ž‘์„ฑํ•˜๊ณ , ๊ฒ€ํ† ํ•˜๋Š” ๋ฐ ์ง‘์ค‘๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Git์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ ์ค‘ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Git์˜ ๊ธฐ๋Šฅ๊ณผ ํŠน์ง•์„ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ž์‹ ์—๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๊ณ ์˜ ํˆฌ์ž ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ย  ๋ธŒ๋žœ์น˜ (Branches) Git ์ €์žฅ์†Œ์—๋Š” "main" ๋˜๋Š” "master"(deprecated)๋ผ๋Š” ๋ฉ”์ธ ๊ฐœ๋ฐœ ๋ผ์ธ์ด ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๊ธฐ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ธŒ๋žœ์น˜๋“ค์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด๋‚˜ ์ˆ˜์ •์„ ๋ณ‘ํ–‰ํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ์ปค๋ฐ‹ (Commits) Git ์ปค๋ฐ‹์€ ์—…๋ฐ์ดํŠธ๋œ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด ํŠน์ • ์‹œ์ ์˜ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปค๋ฐ‹์€ ์ด์ „ ์ปค๋ฐ‹ ์ดํ›„๋กœ ์ด๋ฃจ์–ด์ง„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์˜ ์ „์ฒด์ ์ธ ์—ญ์‚ฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹์„ ์ฐธ์กฐํ•  ๋•Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์œ ํ•œ ์•”ํ˜ธํ™” ํ•ด์‹œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. git show abc123def456789 ์ด ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง„ ์ปค๋ฐ‹์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ย  ํƒœ๊ทธ (Tags) Git ํƒœ๊ทธ๋Š” Git ์—ญ์‚ฌ ๋‚ด์—์„œ ์ฃผ์š” ์ด์ •ํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค, ๋ฒ„์ „, ๋˜๋Š” ์ค‘์š”ํ•œ ์ปค๋ฐ‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํƒœ๊ทธ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์—ฌ์ •์—์„œ ํŠน์ • ์‹œ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋“œ (HEAD) ํ˜„์žฌ ์ฒดํฌ์•„์›ƒ๋œ ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์ตœ์‹  ์ปค๋ฐ‹์€ HEAD์— ์˜ํ•ด ํ‘œ์‹œ๋˜๋ฉฐ, ์ €์žฅ์†Œ ๋‚ด์˜ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋ธŒ๋žœ์น˜์— ์žˆ์„ ๋•Œ, HEAD๋Š” ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ฐ€๋” HEAD๋Š” ๋ธŒ๋žœ์น˜์˜ ๋์ด ์•„๋‹Œ ํŠน์ • ์ปค๋ฐ‹์„ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ย  ์Šคํ…Œ์ด์ง€ (Stages) Git ๋‹จ๊ณ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ Git ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ปค๋ฐ‹๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ „ํ™˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Git ๋‹จ๊ณ„๋ฅผ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ด…์‹œ๋‹ค: * ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ (Working directory) ๐Ÿ‘ท: ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ƒ์„ฑํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ํŒŒ์ผ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. * ์Šคํ…Œ์ด์ง• ์˜์—ญ (Staging area) ๐Ÿš‰: ์Šคํ…Œ์ด์ง• ์˜์—ญ์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์ค€๋น„ํ•˜๋Š” ๋Œ€๊ธฐ ์˜์—ญ ๋˜๋Š” ์‚ฌ์ „ ์ปค๋ฐ‹ ๊ตฌ์—ญ์ž…๋‹ˆ๋‹ค. * ๋กœ์ปฌ ์ €์žฅ์†Œ (Local repository) ๐Ÿ—„๏ธ: ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” Git์ด ์ปค๋ฐ‹๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์˜๊ตฌํžˆ ์ €์žฅํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์—ญ์‚ฌ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ , ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋ฉฐ, ๋™์ผํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. * ์›๊ฒฉ ์ €์žฅ์†Œ (Remote repository) ๐Ÿ›ซ: ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ์ค‘์•™ ์„œ๋ฒ„(์˜ˆ: GitHub, GitLab, Bitbucket)์— ์œ„์น˜ํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ย  Git ์‹œ์ž‘ํ•˜๊ธฐ ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด๋ผ๋ฉด, Git์—์„œ๋Š” ์ž‘์—… ๊ณต๊ฐ„(workspace)์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์ €์žฅ์†Œ(repository)๋ฅผ ํฌํฌ(fork)ํ•˜๊ฑฐ๋‚˜ ํด๋ก (clone)ํ•˜์—ฌ ๊ทธ ์ž‘์—… ๊ณต๊ฐ„์˜ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์™„์ „ํžˆ ์ƒˆ๋กญ๊ฒŒ ๋กœ์ปฌ ํด๋”์—์„œ ์‹œ์ž‘ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํด๋”๋ฅผ Git ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด git init ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋กœ๋Š” ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •์„ ๋ฐ˜๋“œ์‹œ ์žŠ์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜ ์ž‘์—… ๋กœ์ปฌ์—์„œ ์ž‘์—…ํ•  ๋•Œ๋Š” ํ˜„์žฌ ์–ด๋–ค ๋ธŒ๋žœ์น˜์— ์žˆ๋Š”์ง€ ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋“ค์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค: # Will show the changes in the local repository git branch # Or create a branch directly with git branch feature-branch-name ๋ธŒ๋žœ์น˜ ๊ฐ„ ์ „ํ™˜์„ ์œ„ํ•ด์„œ๋Š”: git switch ๋˜ํ•œ, ๋ธŒ๋žœ์น˜ ๊ฐ„ ์ „ํ™˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค: git checkout # A shortcut to switch to a branch that is yet to be created with the -b flag git checkout -b feature-branch-name ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค: git status ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ„ฐ๋ฏธ๋„์— ๋ธŒ๋žœ์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋„์™€์ฃผ๋Š” ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„ ์• ๋“œ์˜จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ์ž‘์—… ์ปค๋ฐ‹์„ ์ž‘์—…ํ•  ๋•Œ, git commit -m์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๊ณ , git amend๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. git commit -m "์˜๋ฏธ ์žˆ๋Š” ๋ฉ”์‹œ์ง€" ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋Š” ์ƒˆ ์ปค๋ฐ‹์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  --amend ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ git add . git commit --amend ์ด ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์—ด์–ด ํ•„์š”ํ•˜๋ฉด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. git push origin your_branch --force ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์ฃผ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ง„ํ–‰ ์ƒํ™ฉ์„ ์žƒ๊ฑฐ๋‚˜ ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‹ค์ˆ˜๋กœ ๋ฆฌ์…‹ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์— ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์„ ํ•ฉ์น˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค(interactive rebase)๋ฅผ ํ†ตํ•ด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  git log๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๊ทผ ์ปค๋ฐ‹๋ถ€ํ„ฐ ๊ณผ๊ฑฐ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” ์ˆœ์„œ๋กœ ์ปค๋ฐ‹ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  ๋ฒˆ์—ญ: [https://ducktopia.tistory.com/132] ์›๋ฌธ:

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค