git์ ์ผ์ข ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (vcs)์ด๋ค. ๋ฆฌ๋ ์ค ํ ๋ฅด๋ฐ์ฆ์ ์ํด ๋ง๋ค์ด ์ก์ผ๋ฉฐ, ๊นํ๋ธ์ ๊น๋ฉ ๋ฑ ์ฌ๋ฌ ์๋น์ค๋ฅผ ํตํด ํธ์คํ ํ ์ ์๋ค.
git init : ๋๋ ํฐ๋ฆฌ ๋ด์ ํ์ผ๋ค์ ๊น์ด๋ผ๋ vcs๋ก ๊ด๋ฆฌํ๋ ๋ช ๋ น์ด .git ํด๋๋ ์จ๊น ํ์ผ์ ํด๋น
- Working Directory
๋ก์ปฌ ์ปดํจํฐ ํ๊ฒฝ์์ ์์
ํ๋ ํด๋๋ค์ด ์์นํจ. ์ค ์์
๊ณต๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ.
working directory์์ staging area๋ก ๋๊ธฐ๋ ค๋ฉดgit add . / {ํด๋๋ช }์ ํฐ๋ฏธ๋์ ์ ๋ ฅ. - Staging Area
ํ๋ก์ ํธ๊ฐ ์งํ ์ค์ธ ๋๋ ํฐ๋ฆฌ ๋ด์ ๋ชจ๋ ํ์ผ๋ค์์์ ๋ณํ๊ฐ ํ๋ ํ๋ ์ธ์ธํ ๋ฒ์ ์ ์ฐจ์ด๊น์ง ์ด์ด์ง ํ์๋ ์๋ค. ๋ฐ๋ผ์ working directory์์ ๋ฒ์ ์ผ๋ก ๋ฌถ์ ๊ฒ๋ค์ staging area๋ก ๋ด๋ฆด ์ ์์.
staging area์์ working directory๋ก ๋ค์ ๋ด๋ฆฌ๊ธฐ ์ํด์๋git rm --cached {ํ์ผ๋ช }๋ช ๋ น์ด๋ฅผ ํฐ๋ฏธ๋์ ์ ๋ ฅํ๋ฉด ๋จ - Repository
staging area์ ์๋ ํ์ผ๋ค์ ์งํฉ์ ์๋ก์ด ๋ฒ์ ์ผ๋ก ๊ธฐ๋กํ๊ณ ์ถ๋ค๋ฉด
git commit -m " ์ปค๋ฐ ๋ฉ์์ง๋ช "๋ฐฉ์์ ํตํด์ ์๋ก์ด ๋ฒ์ , ์ฆ ์ปค๋ฐ์ผ๋ก ๋ง๋ค์ด์ค ์ ์๋ค. ์์์์ git add .๊ณผ ์ปค๋ฐ์ ๋์์ ์งํํ ์ ์๋ ๋ช ๋ น์ด๋git commit -am "์ปค๋ฐ ๋ฉ์์ง๋ช "์ด๋ค.
Repository์๋ ๋ก์ปฌ๊ณผ ์๊ฒฉ(remote)๊ฐ ์กด์ฌํ๋ค. ๋ก์ปฌ์ ์ฌ์ฉ์์ ์ปดํจํฐ๋ฅผ, ์๊ฒฉ์ ๊นํ๋ธ์ ๊น๋ฉ์์์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
- ๊ฐํ๊ฒ ๋๋๋ฆฌ๊ธฐ
working directory, staging area, repository์ ์๋ ๋ด์ญ์ ๋ชจ๋ ๋ ๋ ค๋ฒ๋ฆผ =>git reset --hard HEAD^ - ์ ๋นํ ๋๋๋ฆฌ๊ธฐ
๊ทธ๋ฅ git reset ๋ช ๋ น์ด๋ง์ ์ฌ์ฉํ๋ค๋ฉด ๋ํดํธ๋ก ์ ์ฉ๋๋ ์ต์ ์ด๋ค. Repository, staging area์ ์๋ ๊ฒ์ ๋ชจ๋ ๋๋๋ฆฐ๋ค =>git reset --mixed HEAD^ - ์ด์ง๋ง ๋๋๋ฆฌ๊ธฐ
repository์ ์๋ ๊ฒ๋ง ๋ ๋ ค๋ฒ๋ฆผ =>git reset soft HEAD^
git์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ํ์ฌ ๋๋ง์ ํ๋ฆ์ ๋ง๋ค์ด ์์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ์ด๋ ํ์ผ๋ก ํ์ ์ ํ ๋ ๊ฐ์๊ฐ ๋งก์ ์ญํ ์ ์ง์คํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ๊ทธ ์์๊ฐ ๋ ์ ์๋ค. ์ถํ์ merge๋ฅผ ํตํด ๋ธ๋์น ๊ฐ์ ํฉ๋ณ๋ ๊ตฌํํ ์ ์๋ค.
- ๋ธ๋์น ๋ง๋ค๊ธฐ :
git branch {๋ธ๋์น๋ช } - ๋ธ๋์น ์ด๋ :
git checkout {๋ธ๋์น๋ช }์ถ๊ฐ :git checkout -b "{๋ธ๋์น๋ช }"๋ช ๋ น์ด๋ฅผ ํตํด ๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค๊ณ ๋ฐ๋ก ์ด๋ํ ์ ์์ - ๋ธ๋์น ๊ฐ์ ํฉ๋ณ :
git merge {๋ธ๋์น๋ช }=> ํ์ฌ ์์นํ ๋ธ๋์น๋ก ๋์ ๋ธ๋์น๋ฅผ ํฉ์น๊ธฐ
reset ๋ช ๋ น์ด๋ ๊ณผ๊ฑฐ์ ๊ธฐ๋ก์ ์น ๋ ๋ ค๋ฒ๋ฆฐ๋ค. revert ๋ช ๋ น์ด๋ ๊ณผ๊ฑฐ์ ๊ธฐ๋ก์ ์น ๋ ๋ ค๋ฒ๋ฆฌ๋ ๊ฒ์ด ์๋, ๊ณผ๊ฑฐ์ commit์ ์๋ก ์์ฑํ๋ ๋๋
- ์๊ฒฉ ์ ์ฅ์์ ๋ฑ๋ก :
git remote add {์๊ฒฉ์ ์ฅ์ ๋ณ๋ช } {์๊ฒฉ ์ ์ฅ์ url} - ์๊ฒฉ ์ ์ฅ์ ์กฐํ :
git remote -v๋ช ๋ น์ด๋ฅผ ํตํด ์๊ฒฉ ์ ์ฅ์์ ๋ณ๋ช ๊ณผ url์ ํจ๊ป ์กฐํ ๊ฐ๋ฅ - ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ๋ก์ปฌ ์ ์ฅ์(repository)์ ํฉ์ณ์ ๋๊ธฐํ :
git pull - ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ์ผ๋จ ๊ฐ์ ธ์ค๊ธฐ :
git fetch {์๊ฒฉ์ ์ฅ์๋ช } - ์๊ฒฉ ์ ์ฅ์์์ ๊ฐ์ ธ์จ ๋ด์ฉ์ ํ์ฌ ๋ธ๋์น์ ํฉ๋ณ :
git merge {origin/main}=> origin์ด๋ผ๋ ๋ณ์นญ์ ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น๋ฅผ ํ์ฌ ์์นํ ๋ธ๋์น์ ํฉ๋ณ
Github๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ฌ๋๋ค์ ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ์ฌ ๊ธฐ์ฌํ๊ณ , merge ๋ฐ๋ ์ผ์ด์ค๊ฐ ์๋นํ ๋ง๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ธ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ forkํ์ฌ ์์ ์ ๊ณ์ ์ ๋ณต์ ๋ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋ง๋ ๋ค.
- ๋ณต์ ๋ ์์ ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ
git clone {๋ณต์ ๋ ๋ ํฌ์งํ ๋ฆฌ์ url์ฃผ์}ํ์ฌ ์ปดํจํฐ์ ๋ก์ปฌ ๋ ํฌ์งํ ๋ฆฌ๋ก ๊ฐ์ ธ์จ๋ค. - ๊ธฐ์ฌํ๊ณ ์ถ์ ์์
์ ๋ก์ปฌ ํ๊ฒฝ์์ ์งํํ๊ณ ๋ณต์ ๋ ์๊ฒฉ ๋ ํฌ์งํ ๋ฆฌ๋ก
git push origin main๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ด๋ฃ๋๋ค. - github์ ์๊ฒฉ ๋ ํฌ์งํ ๋ฆฌ์์ pull request๋ฅผ ๋ ๋ฆฐ๋ค.
- ์์์๊ฐ PR์ ํ์ด๋ณด๊ณ merge๋ฅผ ์น์ธํด์ฃผ๋ฉด ์๋ฃ!
=> ์์์ ์ ์ฅ์์ pull์ ํด๋ฌ๋ผ๊ณ ์์ฒญํ๋ ๊ฒ์ด๋ฏ๋ก pull request๊ฐ ์๋๊น?