22.08.17 ์์ ์ ํตํด ๊ณต๋ถํ ๋ด์ฉ๋ค์ ์ ๋ฆฌํ์์ต๋๋ค ๐
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค! ๐
ํ์ ๋ฐ ํ๋ก์ ํธ๋ฅผ ํ ๋, ์คํ๋ฆฐํธ ๋ฏธํ , ํฅ์คํ ๋ฏธํ , ํ๊ณ ๋ฑ๋ฑ ์ฒดํฌ๋ฅผ ํ๊ณ ๋์ด๊ฐ์ผ ๋ฌด์์ ๋ฐฐ์ ๋์ง, ์ป์ด๊ฐ๋ ๊ฒ๋ค์ด ์์ต๋๋ค.
ํ์ฌ์์๋, ๋ณดํต ์คํ๋ฆฐํธ ์ฃผ๊ธฐ ๋์ ๋ง์ง๋ง๋ ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ, ํ๊ณ , ๋ค์ ์ ๋ต ๋ฑ์ ์ง๊ธฐ ์ํด ํ๋ฃจ๋ฅผ ๋ค ๋ณด๋ผ ์ ๋๋ก ์ค์ํ ์์ ์ ๋๋ค.
ํ๋ก์ ํธ์ ๋ํด ํ๊ณ ๋ฅผ ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ด 3๊ฐ์ง ์น์ ์ผ๋ก ๋๋ ์ ์ ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- Liked ( ์ข์๋ ์ )
- Learned ( ๋ฐฐ์ฐ๊ณ ๋๋ ์ )
- Lacked ( ์์ฌ์ ๋ ์ )
๊ทธ๋์ ์ ๊น, ์ ๋ฒ ๊น ์์ ๋ ํ๋ ๋ฏธ๋ ํ๋ก์ ํธ์ ๋ํ ํ๊ณ ๋ฅผ ์ ๋ฆฌํด๋ณด๊ณ ๋์ด๊ฐ์ผ๋ฉด ํฉ๋๋ค.
๐ฒ ๋ฏธ๋ ํ๋ก์ ํธ (Pig The Dice Game)
- Liked
git flow์ ๋ํด์ ์ ๋๋ก ์ ์ฉํด๋ณด๊ณ , ํ์๊ฐ์ ํ์ ํ๋ ๊ณผ์ ์ ๋ฐฐ์ธ ์ ์์ด์ ์ข์์ต๋๋ค.- Learned
git flow ๋์ ์๋ฆฌ ๋ฐ CLI๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋ฅ์ ์ตํ๊ณ , ์์ ํด๋ณผ ์ ์๋ ์ข์ ๊ธฐํ์์ต๋๋ค.- Lacked
ํ ํ์ ์ด์ง๋ง, ํ๋ก์ ํธ๊ฐ ๋์ ๋ค๋ฐ์ ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ์๋๋ค๋ณด๋, ์ฐจ๋ก ์ฐจ๋ก ์งํ๋๋ ๊ณผ์ ์์ ์๊ฐ์ด ์ฝ๊ฐ ์ง์ฒด๋ ๋ถ๋ถ์ด ์์ฌ์ ์ต๋๋ค.
์ฌ์ค, ํ๋ก์ ํธ๋ฅผ ํ ๋๋ ๋ชจ๋์ ์ญ๋์ด ์ค์ํ๊ธด ํ๋ฐ, ํ์ฅ์ ์ญ๋์ด ๋ ์ค์ํฉ๋๋ค.
ํ์ฅ์, ์ฐ๋ฆฌ์ ํ์ ๋ค์ ๊ธฐ๋ถ ๋์์ง ์๊ฒ ๋ชฐ์๋ถ์ฌ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ๋ ๋ค๊ณ , ๊ฐ์ง์ ํด์๋ ์ ๋ ๊ฒ์ด๊ณ , ๋๊ธฐ๋ถ์ฌ๋ฅผ ์ด์ฌํ ํด์ค์, ํ์๋ค์ด ๋ฐฉํฅ์ ์์ง ์๊ฒ ์ง์ํด์ฃผ๊ณ , ์ํฌํธ ํด์ฃผ๊ณ ์ด๋์ด์ฃผ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ ๋ํ ์ค์ํฉ๋๋ค.
ํ์ฅ ํผ์ ๋ฆฌ๋ทฐ๋ฅผ ํ๋ ๊ฒ์ด ์๋๊ณ , ๋ด๋น ๋ฆฌ๋ทฐ์ด๊ฐ ํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ ์ ์ฒด๊ฐ ๋ชจ์ฌ์, ํ๋ก์ ํธ๋ฅผ ์๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์๊ฒฌ์ ์ ์ํ๋ ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ, ์ข ์ข ์คํ๋ฆฐํธ ๋ง์ง๋ง ๋ ์๋ ์๋ฏธ ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๊ทธ๋์ ๊ผญ ํ๊ณ ํ๋ ์๊ฐ์ ๊ฐ์ง๋ฉด ์ข๊ฒ ๊ณ , Final ํ๋ก์ ํธ ๋์๋ ์คํ๋ฆฐํธ ๋จ์๋ณ๋ก ํ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ ์ค๋ ์์ ๋ชฉํ
๋ด๊ฐ ํ์ ์ ํ๋ค ์ค์๋ฅผ ํ๊ฑฐ๋ ์๋ชปํ์ ๋ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
pushํ๊ธฐ ์ ์ ๋จ๊ณ(์์ ์ ์ add, commit ๋ฑ์ ํ ๋) ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ๋์ฉ ๋ฐฐ์๋๋ค!
๋ฒ์ ๊ด๋ฆฌ๋ผ๋ ์ธก๋ฉด์์ ๋ณด๋ฉด, move ๋ช ๋ น์ด๋ ์ํ์ฑ์ด ์์ต๋๋ค.
$ ls
// README.md
$ mv README.md unread.me
$ ls
// unread.md
$ git status
์ด๋ฏธ tracking ํ๊ณ ์๋ ํ์ผ์ ๋ํด์ ๊ทธ๋ฅ ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์กด ์กด์ฌํ๋ README.md๊ฐ ์ง์์ง๊ณ unread.md๊ฐ ์๋ก ์๊ฒผ๋ค๊ณ ํ๋จํ๊ณ ์์ด์, ๋ฒ์ ๊ด๋ฆฌ์ ์ธก๋ฉด์์ ์ฐ์์ฑ์ด ๋จ์ด์ง๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์, ๋ด์ฉ์ ๊ฐ์๋ฐ ์ด๋ฆ์ด ๋ฐ๋๋ค๊ณ ํ ๋ฒ ๋ ํด์์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์, ์ํ๋ฅผ ๋๋๋ ค๋ณด๊ฒ ์ต๋๋ค..!
์ฐ์ ๋๊ฐ์ด ์ด๋ฆ์ ๋ฐ๊ฟ์ฃผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๋ณต๊ตฌ๊ฐ ๋ฉ๋๋ค.
$ mv unread.me README.m
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํด์ผ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๊น์?
๋ค์๊ณผ ๊ฐ์ด move ๋ช ๋ น์ด ์์ git์ ๋ถ์ด๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
$ **git** mv unread.me README.md
์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ์ธ๋ง ํ๋ฉด, add ํ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก commit์ ํ ์ ์์ต๋๋ค!
$ git checkout -- unread.md
// checkout์ ์ฝ๊ฐ ๊ตฌ์๋์ ์ธ ์ธ์ด๋ผ์, ๋ค์๊ณผ ๊ฐ์ด restore๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
$ git restore -- unread.md
// ํ์ผ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ,
// ์๋์ ๊ฐ์ด ์
๋ ฅํ๋ฉด ํ์ฌ ์์น ์๋๋ก ๋ชจ๋ ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ ์ ์์ต๋๋ค.
$. git restore .
ํ์ฌ์์ ์ผ์ ํ๊ฑฐ๋, ํ์ ์ ํ๋ค๊ฐ ํ ์ผ์ ๋ค ํ๊ณ ๋ฐฉ๊ธ commit์ ํ๊ณ , push ์ง์ ์ด์๋๋ฐ, ๊ฐ์๊ธฐ ์์ ํ๋ผ๋ ์์ฒญ์ด ๋ค์ด์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, unstaging์ ํ๋ฉด ๋ฉ๋๋ค.
$ git reset HEAD {filename}
๋ง์ฝ, unstaging ํ๋ฉด์ ๋ฐ๋ก ์ง์ฐ๊ณ ์ถ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
$ git rm -f {filename}
๋ ์ค ์ด๋ ๋ฐฉ๋ฒ์ด ์ข์๊ฐ..๋ฅผ ์๊ฐํด๋ณด๋ฉด,
ํ์์ ์๊ฐ ๋ง์ผ๋ฉด ๋ง์์๋ก merge ๋ฐฉ์์ ์๋ฃจ์
์ด ํจ์ฌ ํจ์จ์ ์
๋๋ค.
n๋ช ์ pull request๋ฅผ ๋ฐ์ผ๋ฉด n๊ฐ์ rebase๊ฐ ํ์ํ๋ฐ, ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ๋ง์ง๋ง์ conflict๋ฅผ ์ผ์ผ์ผ์ ์ต์ข merge ํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค.
commit์ ํ ๋๋ ๊ธด์ฅ๊ฐ์ ๊ฐ์ง๊ณ ํด์ผํฉ๋๋ค.
๋ฐ๋ก ์ง์ commit ์ค์๋ผ๋ฉด, ๊ทธ๋ด ์ ์๋ค.. ์๊ฐํ ์ ์์ง๋ง, 10์ผ ์ , 100๊ฐ ์ ๋ฑ์ ์ปค๋ฐ์ ์์ ํ๋ ค๋ฉด, ์ด๊ฑด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.๐ก
$ git commit
commit ์์ ์ ์ํ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ git commit --amend
commit ์์ ์๋ฃ! โ๐ป
rebase ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด commit ๋ ์ง๋ฅผ ์์ ํ ์ ์์ต๋๋ค..! ๐ (์ ์ฉํ ๊น๋ด ๋ ๋ง์ ์ํ์ฌ..๐)
history๋ ๋ฒ์ ๊ด๋ฆฌ์ ์ธก๋ฉด์์๋ ๊ฐ์ ๋งฅ๋ฝ์ ๋๋ค..!
์๋ชป๋ ์ด๋ ฅ์ ๋จ๊ฒผ๋ ๊ฒ์ push ํด๋๊ณ , ๋ํํ ์๋ง ์ง์ด๋ค๊ณ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ์ด ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค.(๊ทผ๋ณธ์ ํด๊ฒฐ x)
์ด๋ ๊ฒ ๋์์ ๋, ์ฌ๊ณผ๋ฅผ ๋นจ๋ฆฌํ์ญ์์คโฆ ( ์ฃ์กํฉ๋๋ค.. ํ์ผ ๋๋๋ฆด๊ฒ์โฆ ใ ใ )
์ด๋ ๊ฒ ํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์ปค์ง์ง ์์ต๋๋ค..
๊ทธ๋ฆฌ๊ณ rest ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ง์ ์ ๊ฒฝ์ฐ์,
์ด๋ ๊ฒ ์ง์๋ ์ด๋ ฅ์ด ๋จ์์๊ธฐ ๋๋ฌธ์, ์๋ ์ผ์ ์๊ฒ ๋ง๋๋ ๊ฑด ์ด๋ ต์ต๋๋ค!!!!!
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
๋ค์๊ณผ ๊ฐ์ด ์ค์ตํด๋ด ์๋ค.
$ touch a.md
$ touch b.md
$ touch c.md
$ git add a.md
$ git commit
$ git add b.md
$ git commit
$ git add c.md
$ git commit
$ git revert --no-commit HEAD~3..
๐์ด ๋, no-commit ๋ช ๋ น์ ์์ฃผ๋ฉด ํ๋์ฉ ๊ฑด๋๊ฐ ๋ ๋ง๋ค ์ผ์ผํ commit์ ์ฐ์ด์ผ ํฉ๋๋ค!
a, b, c๊ฐ ์ง์์ก๋ค ๊ทธ๋ฐ ๊ฑด ๋ณด์ด์ง ์๋๋ผ๋, ๋ง๋ค๊ธฐ ์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค!
ํ๋ง๋ค reset์ด๋ revert ์ค ์ด๋ ๊ฒ์ ์ ํธํ๋์ง๋ ๋ชจ๋ฅด์ง๋ง, revert๋ฅผ ์ ํธํ๋ ํธ์ธ ๊ฒ ๊ฐ๊ธฐ๋ ํฉ๋๋ค.
commit์ ๋๋๋ฆด ๋๋ ์ฌ์ฉํ์ง๋ง,
merge ํ๋ commit์ ์ทจ์ํ ๋๋ revert๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ ๋๋ -m ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด์ ์ฐ๋ฉด ๋ฉ๋๋ค!
๋ค๋ง, merge commit ์ ๋ฉ์ธ์ง๊ฐ ๋ค๋ฅด๊ฒ ๋ฐ ์ ์์ต๋๋ค!!!
์ด๋ป๊ฒ ํ๋ฉด ์ถฉ๋์ ํผํ ์ ์์๊น์ ํฌ์ธํธ๋ฅผ ๋๊ณ ํ์ค์ ์ผ๋ก ํ์ ํด๋ณด๊ธฐ!