๐ฅ๐ฅ๐ฅ๐ฅ๐ฅ๊ฐ๋ฐ์๋ค์๊ฒ "ํ์
","์ํต"์ ๊ฐ์ฅ ์ค์ํ๊ณ , ํ์์ ์ธ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ ์ด์ ๋ ๋ฐฉ๋ํ ํ๋ก์ ํธ๋ฅผ ํผ์์ ๋ชจ๋ ๋ถ๋ถ์ ์์ ํ๊ณ ์ฒ๋ฆฌํ ์๋ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฐ๋ฐ์๋ค์ด ํ์
์ ํ ์ ์๊ฒ ๊ธฐ์ฌํ๊ณ ๋์์ฃผ๋ Git ๊ณผ Github์ ๋ํด์ ๊ณต๋ถํด ๋ด
์๋ค ๐ฅ๐ฅ๐ฅ๐ฅ๐ฅ
์ค๋ช
์ ์์ ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ณด์๋ฉด ์์ฃผ ๊ฐ๋จํ๊ฒ Git๊ณผ Github์ ๊ด๊ณ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค.
์ปดํจํฐ ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ํ๊ณ ์ฌ๋ฌ ๋ช ์ ์ฌ์ฉ์๋ค ๊ฐ์ ํด๋น ํ์ผ๋ค์ ์์ ์ ์กฐ์จํ๊ธฐ ์ํ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์์ ํธ๋ฆฌ(Work Tree) : ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ณ ์๋ ํด๋, ๋๋ ํฐ๋ฆฌ๋ฅผ ๋งํจ
์ธ๋ฑ์ค : ์ปค๋ฐ์ ์คํํ๊ธฐ ์ ์ ์ ์ฅ์์ ์์
ํธ๋ฆฌ ์ฌ์ด์ ์กด์ฌํ๋ ๊ณต๊ฐ
Staging Area๋ผ๊ณ ๋ ๋ถ๋ฆผ
์คํ
์ด์ง(Staging) : ์ธ๋ฑ์ค์ ํ์ผ ์ํ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ
- ์๊ฒฉ ์ ์ฅ์(Remote Repository)
ํ์ผ์ด ์๊ฒฉ ์ ์ฅ์ ์ ์ฉ ์๋ฒ์์ ๊ด๋ฆฌ๋๋ฉฐ ์ฌ๋ฌ ์ฌ๋์ด ํจ๊ป ๊ณต์ ํ๊ธฐ ์ํ ์ ์ฅ์- ๋ก์ปฌ ์ ์ฅ์(Local Repository)
๋ด PC์ ํ์ผ์ด ์ ์ฅ๋๋ ๊ฐ์ธ ์ ์ฉ ์ ์ฅ์
๋ฒ์ ๊ด๋ฆฌ : ๋ฌธ์๋ฅผ ์์ ํ ๋๋ง๋ค ์ธ์ ์์ ํ๋์ง, ์ด๋ค ๊ฒ์ ๋ณ๊ฒฝํ๋์ง ํธํ๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ๊ธฐ๋กํ๊ธฐ ์ํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
๋ฐฑ์ : ํ์ฌ ์ปดํจํฐ์ ์๋ ์๋ฃ๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ์ ๋ณต์ ํ๋ ๊ฒ์ด๋ค. ์ธ์ฅ ํ๋ ๋์คํฌ๋ USB ๋์คํฌ ๋ฑ์ ๋ณ๋ ์ ์ฅ ์ฅ์น๋ฅผ ๋ง๋ จํด์ ๋ฐฑ์ ํ ์๋ ์๊ณ , ๋๋กญ๋ฐ์ค๋ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ์ ๊ฐ์ ์ธํฐ๋ท ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ๋ฐฑ์ ๊ณต๊ฐ์ ์ ๊ณตํ๋ ์ธํฐ๋ท ์๋น์ค ์ค์๋ ๊น ํ์ผ์ ์ํ ๊ฒ์ด ์ฌ๋ฟ ์๋๋ฐ ์ด๋ฅผ ๊น์ ์๊ฒฉ ์ ์ฅ์๋ผ๊ณ ํ๋ค.
ํ์
: ํ์๋ค์ด ํ์ผ์ ํธํ๊ฒ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ํ์
ํ ์ ์๋ค. ๋๊ฐ ์ด๋ ๋ถ๋ถ์ ์ด๋ป๊ฒ ์์ ํ๋์ง ๊ธฐ๋ก์ด ๋จ์ ๋์ค์ ์ค๋ฅ๊ฐ ์๊ฒผ์ ๊ฒฝ์ฐ ํ์
ํ๊ธฐ ์ฝ๋ค.
์ ์ฅ์๋ฅผ ๋ณด๋ค ๊ณ ์์ค์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ธ๋์นญ ๊ด๋ฆฌ ์ ๋ต
- master : ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น๋ก ์ ํ์ ๋ฐฐํฌํ๋ ๋ธ๋์น ์ ๋๋ค.
- develop : ๊ฐ๋ฐ ๋ธ๋์น๋ก ๊ฐ๋ฐ์๋ค์ด ์ด ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์์ ํ ๊ธฐ๋ฅ๋ค์ ํฉ(Merge)์นฉ๋๋ค.
- feature : ๋จ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น๋ก ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop ๋ธ๋์น์ ํฉ์นฉ๋๋ค.
- release : ๋ฐฐํฌ๋ฅผ ์ํด master ๋ธ๋์น๋ก ๋ณด๋ด๊ธฐ ์ ์ ๋จผ์ QA(ํ์ง๊ฒ์ฌ)๋ฅผ ํ๊ธฐ์ํ ๋ธ๋์น ์ ๋๋ค
- hotfix : master ๋ธ๋์น๋ก ๋ฐฐํฌ๋ฅผ ํ๋๋ฐ ๋ฒ๊ทธ๊ฐ ์๊ฒผ์ ๋ ๊ธด๊ธ ์์ ํ๋ ๋ธ๋์น ์ ๋๋ค
- git init (์์ฑํ๊ธฐ) : ์๋ก์ด git ์ ์ฅ์ ์์ฑ
- git pull (๊ฐ์ ธ์ ๋ณํฉํ๊ธฐ) : ์๊ฒฉ ์ ์ฅ์์์ ๋ก์ปฌ ์ ์ฅ์๋ก ์ ๋ฐ์ดํธ, ์๊ฒฉ ์ ์ฅ์์์ ์ต์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋ค์ด๋ก๋ํ์ฌ ๋ด ๋ก์ปฌ ์ ์ฅ์์ ๊ทธ ๋ด์ฉ์ ์ ์ฉ
- git fetch origin(๊ฐ์ ธ์ค๊ธฐ)
: ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ํ์ธ๋ง ํ๊ณ ๋ก์ปฌ ๋ฐ์ดํฐ์ ๋ณํฉ์ ํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ด๋ ฅ์ ํ์ธ, ๊ฐ์ ธ์จ ์ต์ ์ปค๋ฐ ์ด๋ ฅ์ ์ด๋ฆ ์๋ ๋ธ๋์น๋ก ๋ก์ปฌ์ ๊ฐ์ ธ์ด, 'FETCH_HEAD'์ ์ด๋ฆ์ผ๋ก ์ฒดํฌ์์ ๊ฐ๋ฅ
fetch ๋ช ๋ น์ด ํ merge ๋ฅผ ์ํํ๋ ๊ฒ์ pull ๋ช ๋ น์ด์ ๋์ผํ ๊ธฐ๋ฅ
- git add <์ธ๋ฑ์ค์ ๋ฑ๋กํ ํ์ผ๋ช > (์ถ๊ฐํ๊ธฐ) : ๋ณ๊ฒฝ์ฌํญ์ ์ธ๋ฑ์ค์ ๋ฑ๋ก
- git commit -m "์ปค๋ฐ ๋ด์ฉ" (๊ธฐ๋กํ๊ธฐ)
: ์ด์ ์ปค๋ฐ ์ํ๋ถํฐ ํ์ฌ ์ํ๊น์ง์ ๋ณ๊ฒฝ ์ด๋ ฅ์ด ๊ธฐ๋ก๋ ์ปค๋ฐ(ํน์ ๋ฆฌ๋น์ )์ด ์์ฑ
'์์ ํธ๋ฆฌ'์ ์๋ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ ์ฅ์์ ๋ฐ๋ก ๊ธฐ๋กํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ์ฌ์ด ๊ณต๊ฐ์ธ '์ธ๋ฑ์ค'์ ํ์ผ ์ํ๋ฅผ ๊ธฐ๋ก(stage - ์คํ ์ด์ง ํ๋ค๊ณ ํํ)
commit ์งํ ์, ๋ด์ฉ ์ ๋ ฅ ํ์
- git push (๋ฐ์ด๋ฃ๊ธฐ) : ์๊ฒฉ ์ ์ฅ์๋ก ๋ณ๊ฒฝ๋ ํ์ผ์ ์ ๋ก๋ํ๋ ๊ฒ
- git clone (๋ณต์ ํ๊ธฐ)
: ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ณต์ (์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ํต์งธ๋ก ๋ค์ด๋ก๋ํ๋ ๊ฒ)
๋ณ๊ฒฝ ์ด๋ ฅ๋ ํจ๊ป ๋ก์ปฌ ์ ์ฅ์์ ๋ณต์ ๋์ด ์ค๋ฏ๋ก, ์๋ ์๊ฒฉ ์ ์ฅ์์ ๋๊ฐ์ด ์ด๋ ฅ์ ์ฐธ์กฐํ๊ณ ์ปค๋ฐ ์งํ ๊ฐ๋ฅ
- git reset <์ต์ > <๋์๊ฐ๊ณ ์ถ์ ์ปค๋ฐ> (๋๋๋ฆฌ๊ธฐ, ์ด๋ ฅ x)
: ๋์๊ฐ๋ ค๋ ์ปค๋ฐ์ผ๋ก ๋ฆฌํ์งํ ๋ฆฌ๋ ์ฌ์ค์ , ํด๋น ์ปค๋ฐ ์ดํ์ ์ด๋ ฅ์ ์์ ๋ ๋ช ๋ น์ด
- git revert <๋๋๋ฆด ์ปค๋ฐ> (๋๋๋ฆฌ๊ธฐ, ์ด๋ ฅ o)
: ์ํ๋ฅผ ๋๋๋ฆฌ๋ ๋ช ๋ น์ด, reset ๋ช ๋ น์ด์ ๋ฌ๋ฆฌ ์ด์ ์ด๋ ฅ์ ๊ทธ๋๋ก ์ ์ง
- merge (๋ณํฉํ๊ธฐ, ๋ฐ๋ก ํฉ์น๊ธฐ)
: ์ฌ๋ฌ ๊ฐ์ ๋ธ๋์น๋ฅผ ํ๋๋ก ๋ชจ์ ์ ์์ ๋ด๊ฐ ๋์ด์จ ์ ์ฅ์๊ฐ ์ต์ ๋ฒ์ ์ด ์๋ ๊ฒฝ์ฐ, ์ฆ ๋ด๊ฐ pull ์ ์คํํ ํ ๋ค๋ฅธ ์ฌ๋์ด push ๋ฅผ ํ์ฌ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ ๋ฐ์ดํธ ํด๋ฒ๋ฆฐ ๊ฒฝ์ฐ์๋ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ด push ์์ฒญ์ด ๊ฑฐ๋ถ๋ ์ ์์, ๋ค๋ฅธ ์ฌ๋์ ์ ๋ฐ์ดํธ ์ด๋ ฅ์ ๋ด ์ ์ฅ์์๋ ๊ฐฑ์ ํด์ผํจ
- rebase (๋ณํฉํ๊ธฐ, ๋ธ๋์น ์ด๋ ฅ ์ฌ์ ๋ ฌํ๊ธฐ)
: ํ์คํ ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ณ๋ก ์ ๊ฒฝ์ฐ์ง ์๊ณ ํผ์์๋ง ์ปค๋ฐํ๊ฑฐ๋ ์๋๋ฉด ๋ฏฟ์์
์๋ ์์๋ง ์ปค๋ฐํ๋ค๋ฉด merge ๋์ rebase ์ฌ์ฉ ๊ถ์ฅ
- git checkout <๋ธ๋์น๋ช > (์ ํํ๊ธฐ)
: ์ํ๋ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ ํ ์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
merge :
๋ณ๊ฒฝ ๋ด์ฉ์ ์ด๋ ฅ์ด ๋ชจ๋ ๊ทธ๋๋ก ๋จ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ฅ์ด ๋ณต์กํด์ง
rebase :
์ด๋ ฅ์ ๋จ์ํด์ง์ง๋ง, ์๋์ ์ปค๋ฐ ์ด๋ ฅ์ด ๋ณ๊ฒฝ๋จ. ์ ํํ ์ด๋ ฅ์ ๋จ๊ฒจ์ผ ํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ๋ฉด ์๋จ.
- git remote ๋ฆฌ๋ชจํธ ์ ์ฅ์ ํ์ธ
- git remote add <๋จ์ถ์ด๋ฆ> :๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ถ๊ฐ
- git remote show <๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ> :๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ดํด๋ณด๊ธฐ
- git remote rename <๊ธฐ์กด ๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ> <๋ณ๊ฒฝํ ๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ> :๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ ๋ณ๊ฒฝ
- git remote remove <๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ> : ๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ญ์
- git branch : ๋ธ๋์น ์์ฑ
- git branch : ๋ธ๋์น ์กฐํ
- git checkout : ๋ธ๋์น ์ ํ
- git checkout -b : ๋ธ๋์น ์์ฑ๊ณผ ์ฒดํฌ์์์ ํ๊บผ๋ฒ์ ์คํ
- git merge : ๋ธ๋์น ๋ณํฉ, ์ด ๋ช ๋ น์ด์ ๋ณํฉํ ์ปค๋ฐ ์ด๋ฆ์ ๋ฃ์ด ์คํํ๋ฉด, ์ง์ ํ ์ปค๋ฐ ๋ด์ฉ์ด 'HEAD'๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ธ๋์น์ ๋ฃ์ด์ง๋ฉฐ, 'HEAD'๋ ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ธ๋์น์ ์์นํ๊ฒ ๋จ
'master' ๋ธ๋์น์ ๋ฃ๊ธฐ ์ํด์๋ ์ฐ์ 'master' ๋ธ๋์น์ 'HEAD'๊ฐ ์์นํ๊ฒ ๋ง๋ค์ด์ผ ํจ
1๏ธโฃ ์ ์ ์ฅ์ ์์ฑ ํ Push
$ git init
$ git add .
$ git commit -m ๋ฉ์ธ์ง
$ git remote add origin ์ ์ฅ์ ์ฃผ์
$ git push origin master
---------> ์ต์ด ๋ ํฌ ์์ฑ ํ branch ๋ง๋ค๊ธฐ
2๏ธโฃ ์ต์ด ๋ ํฌ ์์ฑ ํ branch ๋ง๋ค๊ธฐ
master ๊ธฐ์ค์ผ๋ก branch ์์ฑ
$ git branch feature/์ด๋ฆ
$ git checkout feature/์ด๋ฆ
---> ์ฌ๊ธฐ์ ํ์ฌ ๋ธ๋์น ์ด๋์ง ํ์ธ (git branch ๋ช ๋ น์ด๋ก ์ด๋ก๋ถ์ด ์ด๋์ ๋ค์ด์ ์๋์ง ํ์ธํด์ผ๋จ)
$ git add .
$ git status
$ git commit -m ๋ฉ์ธ์ง
$ git push origin feature/์ด๋ฆ
3๏ธโฃ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ค์ด ๋์ ๋ ํฌ์์ branch ๋ง๋ค์ด์ push ํ ๊ฒฝ์ฐ (๋ค๋ฅธ ์ฌ๋์ด ์ต์ด ๋ ํฌ ์์ฑ ์๋ฅผ ๋ค์ด ๋ค๋ฅธ ์ฌ๋ ๋ ํฌ๋ฅผ git cloneํ ๊ฒฝ์ฐ )
$ git init
$ git remote add origin ์ ์ฅ์ ์ฃผ์
$ git add .
$ git commit -m ๋ฉ์ธ์ง
$ git branch ์ ๋ธ๋ฐ์น ์ด๋ฆ
$ git branch
$ git checkout ์ ๋ธ๋ฐ์น ์ด๋ฆ
$ git push origin feature/์ด๋ฆ