์ด๋ฒ ํฌ์คํ ์์๋ Git ์ฌ์ฉ ์ค ๋ง๋ฅ๋จ๋ฆฐ ์ํ์ฐฉ์ค, ์๋ฌ๋ค์ ๋ํด ์ดํดํ๊ณ ํด๊ฒฐ๋ฒ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค
Q1.
reset
์ผ๋ก Local commit์ ๋๋๋ ธ๋๋ฐ Local File์ ๊ทธ๋๋ก ๋จ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ํด์ผ File๋ ๊ณผ๊ฑฐ๋ก ๋๋๋ฆด ์ ์๋์?
โ Why?
reset
์ commit๋ง ๋๋๋ฆฌ๊ณ File์ ๋๋๋ฆฌ์ง ์๊ธฐ์ ๋ฐ์ํ ์ด๋ ค์์
๋๋ค
โ Solution
reset --hard
๋ฅผ ์ฌ์ฉํ๋ฉด Working Directory์ Local File๋ ์ ๊ฑฐ๋ฉ๋๋ค
ํน์
restore
๋ฅผ ๊ธฐ์กด Local File์ ์ง์ฐ๊ณ ์ฌ์ฉํ๋ฉด commit์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ฌ์์ฑํฉ๋๋ค
Q2.
Local์์reset
์ ํ๊ณ Remote์ ์ ์ฉํ๊ธฐ ์ํดpush
๋ฅผ ํ๋ ค๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ๊ทธ๋ฐ๊ฐ์?
โ Why?
Git commit์ ์ค๋ก์ง ์๋ก ์๋ ๊ฒ๋ง ๊ฐ๋ฅํฉ๋๋ค
๋ญ๊ฐ๋ฅผ ์ ๊ฑฐํ๋๋ผ๋ ์ ๊ฑฐํ๋ commit์ ์์์ผ ํ์ฃ
ํ์ง๋ง ์ฐ๋ฆฌ๋ reset
์ด๋ผ๋ ์ปค๋งจ๋๋ก ๊ณผ๊ฑฐ๋ก ๋์๊ฐ ์ ์์์ ์๊ณ ์์ต๋๋ค.
Push๊ฐ ์ ์๋ ๊น?๋ผ๋ ์๋ฌธ์ ์ด reset
์ ์ฉ๋๋ฅผ ์๋ชป ์ดํดํจ์์ ๋น๋กฏ๋ฉ๋๋ค
reset
โ Solution
Remote์ commit๋ค์ ๊ตณ์ด ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด
git push --force
๋ฅผ ํตํด ๊ฐ๋ฅํฉ๋๋ค
Q3.
๋๋ฃ์ ์์ ์ค์ธ Repository๊ฐ ์์ต๋๋ค.
๊ฐ์ ์์ ์ค์ ๋๋ฃ๊ฐ ๋ง๋ branch๋ฅผ ์ ์ Local๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
โ Why?
์ผ๋ฐ์ ์ผ๋ก clone
์ผ๋ก Repository๋ฅผ ๊ฐ์ ธ์ค๋ฉด default๋ก ์ค์ ๋ 1๊ฐ์ branch๋ง ๊ฐ์ ธ์ต๋๋ค
์ดํ ๋ค๋ฅธ branch๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค๋ฅธ ๋ช
๋ น์ด๊ฐ ํ์ํฉ๋๋ค
โ Solution
git checkout -t origin/<branch๋ช
>
๋ช
๋ น์ด๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค
์ฌ๊ธฐ์ branch๋ช
์์ ๋ถ์ origin์ Remote ์ ์ฅ์์ ๋ณ๋ช
์
๋๋ค
Q4.
๊ณผ๊ฑฐ์ commit ์ ๋ณด (Author, ๋ฉ์์ง ๋ฑ)๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ต๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ๋์?
โ Why?
Git commit์ ์ค๋ก์ง ์๋ก ์๋ ๊ฒ๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฏธ ํ๋ฌ๊ฐ commit์ ๋ฐ๊พธ๋ ๊ฒ์ ๊ทน๊ตฌ ์ง์ํด์ผ ํฉ๋๋ค
โ Solution
๊ทธ๋ผ์๋ ๊ผญ ํ์ํ๋ค๋ฉด, rebase
๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค
git commit --amend
๊ฐ์ฅ ์ต๊ทผ commit์ ์ด ๋ช
๋ น์ด๋ฅผ ํตํด ํธ์ํ๊ฒ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค
git rebase -i <commitํด์>
ํ์ง๋ง, ๊ณผ๊ฑฐ์ commit์ ๋ณ๊ฒฝํ๊ธฐ๋ ์ฝ์ง ์์ต๋๋ค
์ฐธ๊ณ : Rebase ๊ด๋ จ ํฌ์คํ
Q5.
origin/HEAD
๋ ๋ฌด์์ ์๋ฏธํ๋์?
๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
โ What?
์ฐ์ origin์ Remote Repository๋ฅผ ๋ปํ๋ฉฐ ์ผ์ข
์ ๋ณ๋ช
์ผ๋ก ๋ณผ ์ ์์ต๋๋ค
๊ทธ๋ฆฌ๊ณ HEAD๋ ํ์ฌ checkout๋ branch์ ๋ง์ง๋ง commit์ ๋ปํฉ๋๋ค
Local์์ checkout์ ์์ฃผ ์ฌ์ฉํ๊ฒ ์ง๋ง Remote์ ํ์ฌ branch๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝํ์ ์๋ง(?) ์์ ๊ฒ์ ๋๋ค
์ฌ์ค ์๋ฏธ๋ ๋์ผํฉ๋๋ค.
origin/HEAD
๋, ๋ง ๊ทธ๋๋ก Remote๊ฐ ํ์ฌ ์์
์ค์ธ branch์ ๋ง์ง๋ง commit์ ๋ปํฉ๋๋ค
ํ์ง๋ง, Remote๋ checkout์ด ์๊ธฐ์ Local๊ณผ๋ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค
โ Solution
์ฒ์์ Remote๋ก๋ถํฐ clone์ ๋ฐ์ผ๋ฉด ํน์ 1๊ฐ branch๊ฐ Local๋ก ๋ณต์ฌ๋ ๊ฒ์
๋๋ค
์ด๋ Github์์ default branch๋ก ์ง์ ๋ branch๊ฐ clone๋๋๋ฐ ์ด๊ฒ์ด ์ต์ด์ origin/HEAD๋ก ์ง์ ๋ฉ๋๋ค
์ดํ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ branch๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
๋ญ๊ฐ Remote์์ default๋ฅผ ๋ณ๊ฒฝํ๋ค๋์ง ์์
์ ํ๊ณ fetch
๋ฅผ ํ๋ฉด ๋์ง ์์๊น?์ถ์ง๋ง ์ด์งธ์์ธ์ง ๋์ํ์ง ์์ต๋๋ค
checkout์ด ์๋ remote๋ฅผ ์ํด ๋ช
๋ น์ด๊ฐ ๋ฐ๋ก ์กด์ฌํฉ๋๋ค.
-> git remote set-head origin <Remote branch๋ช
>
Q6.
fetch
์pull
์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
โ ๊ณตํต์
๋ ๋ค Remote์ ์ ๋ณด/์ฝ๋๋ฅผ Local๋ก ๊ฐ์ ธ์ updateํ๋ ๊ฐ๋
์
๋๋ค
โ ์ฐจ์ด์
Local Commit/File์ ๋ณํฉ์ ํ๋์ง ์ฌ๋ถ๊ฐ ๋ค๋ฆ
๋๋ค
fetch
๋ Remote์ ๋ฉํ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํฉ๋๋ค
Remote์ ๊ทธ๊ฐ ๋ณ๊ฒฝ์ฌํญ์ด ์์๋์ง, ์ด๋ก์ธํด ๋ฏธ๋์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ๋ฑ์ ์ ์ ์์ต๋๋ค
pull
์ Remote์ ๋ฉํ์ ๋ณด ๋ฟ๋ง ์๋๋ผ commit์ ๊ฐ์ ธ์ ๋ณํฉ์ํต๋๋ค