TIL 10: Git ๊ธฐ์ด
Git
ํ๋ก๊ทธ๋จ ๋ฒ์ ์ ํธ๋ฆฌํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ
๊ฐ๋ฐ์์๊ฒ๋ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ค์ํฉ๋๋ค. ๋ค์ ์ด์ ๋ฒ์ ์ผ๋ก ๋์๊ฐ์ผํ๊ฑฐ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ํ์ธํด์ผํ๋ ๊ฒฝ์ฐ์ผ ๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Github
Git์ ์ฌ๋ฆด ์ ์๋ Hub (๋ณด๊ด์ ์ ๋๋ก ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค!) ์ด์ธ์๋ GitLab, Bitbucket๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์๊ฒฉ ์ ์ฅ์๊ฐ ์์ต๋๋ค.์ปดํจํฐ ์์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋คํธ์ํฌ ์์ ์ ์ฅ์ ํด๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ๊ฐ ๊ณ ์ฅ๋๋ค๊ณ ํด๋ ๋ค์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
Git๊ณผ Github๋ฅผ ์ ์์๋๋ฉด ํ์ ์ ๋์์ด ๋๋ค๊ณ ํฉ๋๋ค. ์ฝ๋ฉ์ผ๋ก ์ทจ์งํ๊ณ ์ถ์ ๋ถ๋ค์ ์ ์ตํ๋์ ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค!
๊ฐ๋จํ๊ฒ Git์ ๊ด๋ จ๋ ์ฉ์ด๋ฅผ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํน์ ์์ ์ ๋ง๋ค์ด์ง ๋ฐฑ์ ๋ณต์ฌ๋ณธ์ ์ค๋ ์ท์ด๋ผ๊ณ ํฉ๋๋ค. ์ด ๋ณต์ฌ๋ณธ, ์ฆ ์ค๋ ์ท์ ๋ง๋ค์ด์ฃผ๋ ์์ ์ commit์ด๋ผ๊ณ ํ์ฃ ! ์คํ ์์ค๋ ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ด์ฉํ ์ ์๋ ์ํํธ์จ์ด ์ ๋๋ค. ์ด ์คํ ์์ค์ ํน์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ contribute ํ๋ค๊ณ ํฉ๋๋ค. ๋ด๊ฐ ์์ ํ๋ ์์ค ํด๋์ ๋ฒ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ Git์ ๊ด๋ฆฌ ์๋ ๋์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ Git์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋๋ฅผ Git repository๋ผ๊ณ ํฉ๋๋ค. Repo ์์์๋ Remote Repository์ Local Repository๋ก ๋๋์ด์ง๋๋ค. Local Repo์์ ๊ฐ์ธ์ด ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ ๊ณต๊ฐ์ด๊ณ , Remote Repo๋ ๊ฐ์ธ์ด ์์ ํ ์ฝ๋๋ฅผ ํ์ธ๊ณผ ๊ณต์ ํ ์ ์๋ ๊ณต๊ฐ์ ๋๋ค. Repo ๊ฐ์ ๋ค์ํ ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ฐ ์ด์ ๋ํด ์ค๋ช ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์คํ์์ค๋ฅผ ๊ฐ์ ์ํค๊ธฐ ์ํด์๋ ๊ทธ ์คํ์์ค๊ฐ ์๋ Repo์์ ๋ด Remote Repo๋ก ๊ฐ์ ธ์ค๋ ์์ ์ ํด์ผํฉ๋๋ค. ์ด ๊ณผ์ ์ Fork๋ผ๊ณ ํฉ๋๋ค. ํ๊ณ ๋๋ฉด ์ด ์์ค๋ฅผ ์์ ํ๊ธฐ ์ํด ๋ด ์ปดํจํฐ๋ก ๊ฐ์ ธ์์ผ๊ฒ ์ฃ . ์ด ๊ณผ์ ์ Clone์ด๋ผ๊ณ ํฉ๋๋ค. ์ดํ ๋ด ์ปดํจํฐ์ ์์ ๊ณต๊ฐ (Work space)์์ ์ฝ๋๋ฅผ ๋ค ์์ ํ๊ณ , git์ ๊ด๋ฆฌ ํ์ ์๋ ์ํ๋ก ์ฌ๋ ค์ค ์ ์์ต๋๋ค. ์ด ์์ญ์ Staging Area๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Staging Area์ ์ฌ๋ฆฌ๋ ๊ฒ์ Add๋ผ๊ณ ํฉ๋๋ค. ์ด ์์ญ์ ์์ง ์์ ํ์ผ์ Git์ด ๊ด๋ฆฌํ์ง ์๋ ํ์ผ๋ก์จ Unstaged ํน์ untracked file์ด๋ผ๊ณ ํฉ๋๋ค. Staged Area์ ์๋ ํ์ผ๋ค์ commit์ ํตํด Local Repo์ ์ ์ฅํด์ค ๋ค, ๋ค์ ํ์ธ๊ณผ ๊ณต์ ํ ์ ์๋๋ก Remote Repo์ ์ฌ๋ ค์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ Push๋ผ๊ณ ํฉ๋๋ค. ์ดํ Pull request๋ฅผ ํตํด์ ๋ด๊ฐ ์์ ํ ๋ถ๋ถ์ ๋ํด ๋ฐ์ ์ฌ๋ถ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
Git ๋ช ๋ น์ด
- Fork
- clone
git clone <Repo ์ฃผ์> - status: staging area์ untracked files์ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ํ, ํ์ด์ ํ์ผ๊ณผ ๋ณํฉ์ ํ๋ค๊ฐ ์ถฉ๋ํ ๊ฒฝ์ฐ, ์ด๋ค ํ์ผ์ด ์ถฉ๋ํ๊ณ ์๋์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
git status - restore: ๋ณ๊ฒฝ์ฌํญ์ ํ๊ธฐํ๋ ๋ช
๋ น์ด์
๋๋ค. ๋ฐ๋ผ์ ์ฒ์ Clone์ ๋ฐ์๋ ์ํ๋ก ๋๋๋ฆด ์ ์์ต๋๋ค.
git restore <ํ์ผ๋ช > - add
ํน์ ํ์ผ์ Staging area๋ก ์ถ๊ฐํ ๋: git add <ํ์ผ๋ช >
๋ชจ๋ ํ์ผ์ ํ๋ฒ์ Staging area๋ก ์ถ๊ฐํ ๋: git add . - commit
git commit -m 'message': ๋ ์ง, commitํ ์ฌ๋, commit ๋ฉ์ธ์ง๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. - reset: Local Repo์๋ง commit ํด๋์ ์ํ ์ผ ๋, commit์ ์ทจ์ํ ์ ์์ต๋๋ค.
git reset HEAD^: HEAD๋ ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น ์ ๋๋ค.
reset์๋ hard, mixed, soft ์ต์ ์ด ์๋๋ฐ ์ด์ ๊ด๋ จํด์๋ ๋ฐ์ ๊ฐ์ ๋ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. - log: commit๋ค์ ๊ธฐ๋ก์ฌํญ
git log - pull
get pull <shortname> <branch> - push
git push <origin> <branch> - init: ๊ธฐ์กด ๋๋ ํ ๋ฆฌ๋ฅผ Git Repo๋ก ๋ณํํด์ค๋๋ค.
git init - remote add: Github์์ ์๊ฒฉ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์ Local Repo์ Remote Repo์ ์ฐ๊ฒฐํด์ค๋๋ค.
git remote add origin <Repo ์ฃผ์>
git remote add pair <Repo ์ฃผ์>: ์์ค๊ณผ ๋ฌ๋ฆฌ ๋ค๋ฅธ ์ฌ๋์ Repo์ ์ฐ๊ฒฐํฉ๋๋ค. - remote -v: ์ฐ๊ฒฐ๋ Remote Repo ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
Git ๋ช ๋ น์ด๋ ์์ ๊ฐ์ด ์์ต๋๋ค. ๋ช ๋ น์ด ์๋ ํฐ๋ฏธ๋์์ ์ด๋ป์ธ ์ฌ์ฉํ ์ ์๋์ง ์จ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ Git๊ณผ ๊ด๋ จ๋ ์ฉ์ด๋ฅผ ์ดํด๋ดค์ ๋ ๋ดค๋ ๋ช ๋ น์ด๋ค๋ ๋ณด์ด๋ค์. ์๋ค๋ฃจ์๋ ๋ช ๋ น์ด๋ค์ ๋ํด์๋ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ ํด๋์์ต๋๋ค.
Status ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ ๋, ๊ฐ๊ฐ์ ํ์ผ์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ์ ์ ์๋ค๊ณ ํ๋๋ฐ์. ์ฌ๊ธฐ์ Staging area์์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ํ๋ก ๋๋์ด์ง๋๋ค.
Unmodified: ๊ธฐ์กด์ Commitํ๋ ํ์ผ์ ์์ ํ์ง ์์ ์ํ
Modified: ๊ธฐ์กด์ Commitํ๋ ํ์ผ์ ์์ ํ ์ํ
Staged: commit์ด ๊ฐ๋ฅํ ์ํ.
์์์ reset ๋ช ๋ น์ด์ ๋ํด ์ดํด๋ณด์๋๋ฐ์. ์ธ ๊ฐ์ง ์ต์ ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด๊ฑฐ๋ Stackoverflow์์ ์ฐพ์๋ดค์ต๋๋ค!
soft, mixed, hard๊ฐ ์์ต๋๋ค.
- --soft: ์ด ์ต์ ์ commit ๋ง ์ทจ์ํ๋ ๊ฒ๋๋ค. ๋ฐ๋ผ์ Staging Area์๋ ์๋๋ก ๋์ด์์ต๋๋ค.
- --mixed (default): commit๊ณผ stage ๋ ๊ณผ์ ์ ์ทจ์ํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง Working Tree์๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋จ์์์ต๋๋ค.
- --hard: commit๊ณผ unstage๋ฅผ ์ง์ธ ๋ฟ๋ง ์๋๋ผ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค.
ํฐ๋ฏธ๋์ ํตํด Git์ ์๋ก ์ฌ์ฉํด๋ณด์์ต๋๋ค. ํ์ ํ ๋๋ ์ค์ํ๊ฒ ์ฐ์ธ๋ค๊ณ ํด์ ๋ ์ด์ฌํ ๊ณต๋ถํ์ต๋๋ค! ํ์ง๋ง ํ์ด์ ํ์ผ์ ๋ฉ์ผ์ด๋ ๋ธ๋ฃจํฌ์ค๋ฅผ ํตํด ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ํฐ๋ฏธ๋์ ํตํด ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ ์๊ฒ๋ ๊ต์ฅ์ด ์๋ก์ ์ต๋๋ค. ํ์ง๋ง ์๋ก์ด ๋ช ๋ น์ด๋ค์ด ๋ง์ด ์์ด์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผํ๋์ง, ๋ช ๋ น์ด ์ด๋ฆ์ด ๋ญ์๋์ง ์๊ฐ์ด ์๋์ ์ข ์ด๋ ค์ ์ต๋๋คใ ์ฃผ๋ง์ ํ์ผ์ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์ ๋ช ํํ๊ฒ ํ๋ฒ ๋ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค!