๐๏ธ [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] ์๋ฌธ: