๐ Checkout & Reset
๐ฅ Checkout ์ด๋?
๐ฅ Reset ์ด๋?
1. Checkout ์ด๋?
- ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด, ์ด์ commit์ผ๋ก ๋๋์๊ฐ์ผํ ์ํฉ์ด ๋ฐ์ํจ
- ์ด์ commit์ผ๋ก ๋์๊ฐ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ checkout ๊ธฐ๋ฅ์ผ๋ก, ๊ณผ๊ฑฐ commit๊ณผ ํ์ฌ commit์ ๋๋๋๋ ๊ฒ์ ๊ฐ๋ฅ์ผ ํจ
- git log์์ HEAD๊ฐ ๊ฐ๋ฅดํค๋ ์์น๊ฐ ํ์ฌ ๋ฐ๋ผ๋ณด๋ commit์ด๊ธฐ ๋๋ฌธ์ check๋ ์ด HEAD์ ์์น๋ฅผ ๊ณผ๊ฑฐ๋ก ์ด๋ ์์ผ์ค

- ํ์ฌ commit :
commit 7ca25de8afb3cc15d93b1642a07f79cec1679138
- ์ด์ commit :
commit 6fd3306df23faac191f2904e5ca615356a60b475
- ํ์ฌ commit์์ ์ด์ commit์ผ๋ก ์ด๋ ๋ฐฉ๋ฒ : ๐ git check [commit ์ด๋ฆ]


- commit๋ช
๊ธฐ์ค์ผ๋ก ๊ณผ๊ฑฐ ์์ ์ผ๋ก ์ด๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ์ต์ ์ํ๋ก ๋์๊ฐ ์ ์์
- checkout ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ : ๐ git checkout master

>> git chekout 6fd3306df23faac191f2904e5ca615356a60b475
>> git checkout master
2. Reset ์ด๋?
- reset์ ๊ณผ๊ฑฐ ์ด๋ ์์ ์ commit์ผ๋ก ์ด๋๊ณผ ๋์์ ์ด๋ ์์ ์ดํ์ ์กด์ฌํ๋ commit์ ์ญ์ ํจ
- ์ฆ, checkout์ HEAD๋ฅผ ์ด๋์์ผ commit ์์น๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ฒ์ด๋ผ๋ฉด, reset์ ์ด๋ ์์ ์ผ๋ก ์ด๋ํ๊ณ ๊ทธ ์ดํ์ commit๋ค์ ์์ฐ
- reset์ ์ข
๋ฅ๋ "hard reset", "mixed reset", "soft reset"์ผ๋ก ๋๋จ
1) Hard Reset
- Hard Reset ๋ฐฉ๋ฒ : ๐ git reset --hard HEAD^
- "--hard" ์ต์
์ ์ฃผ๊ณ , ์ญ์ ํ commit ๊ฐฏ์(๋๋์๊ฐ ๋จ๊ณ์) ๋งํผ HEAD์ ^๋ฅผ ๋ถ์
- ๐ git reset --hard HEAD^ ๐ 1๊ฐ commit ์ญ์ ํ ์ด์ commit์ผ๋ก ์ด๋
- ๐ git reset --hard HEAD^^ ๐ 2๊ฐ commit ์ญ์ ํ ์ ์ commit์ผ๋ก ์ด๋
- ๐ git reset --hard HEAD^^^ ๐ 3๊ฐ commit ์ญ์ ํ ์ ์ ์ commit์ผ๋ก ์ด๋
- ์๋ ์ฒ๋ผ push๋ฅผ ํ ๋ค(HEAD->master, origin/master ์ธ ์ํ), reset์ผ๋ก ์ญ์ ๋ฅผํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํจ
- remote repository์์ commit ์ํ์ ํ์ฌ local repository์ commit์ด ๋ถ์ผ์นํ๊ธฐ ๋๋ฌธ

- ์ด๋ด ๊ฒฝ์ฐ์๋ --force ์ต์
์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ก push๋ฅผ ์์ผ ์๋ก ์ผ์น์์ผ์ฃผ์ด์ผ ํจ
- remote repository์ ์ํ๋ฅผ local repository์ ๊ฐ์ ๋ก ์ผ์น์ํด
- ๊ฐ์ ๋ก push์ํค๋ ๋ฐฉ๋ฒ : ๐ git push origin master --force


- hard reset์ ์ด์ commit์ผ๋ก ๋์๊ฐ ๋ฟ ์๋๋ผ, ํ์ผ ๋ณ๊ฒฝ ๋ด์ญ๋ ์ ์งํ์ง ์์(์ญ์ )
>> git reset --hard HEAD^
>> git push origin master --force
2) Mixed Reset
- Mixed Reset ๋ฐฉ๋ฒ : ๐ git reset HEAD^
- ์ต์
์ ์ฃผ์ง ์๋ ๊ฒ mixed reset์
- ๋ณตํฉ reset์ ์์ ํ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ฌ ์ด๋ํ commit ์ดํ์ ์์ฑ๋ฌ์๋ ํ์ผ๋ค์ unstage ์์ญ(working tree)์ผ๋ก ์ฎ๊ธฐ๊ณ , ๊ณผ๊ฑฐ ์์ ์ commit ์ํ๋ก ์ด๋ํจ
- ์ฆ, ๊ณผ๊ฑฐ ์์ ์ commit์ผ๋ก ๋์๊ฐ์ง๋ง, commit ์ดํ์ ์์ฑ๋ ํ์ผ์ untract ์ํ๋ก ๊ทธ๋๋ก ๋
- mixed commit์ ๋ง๋ฌด๋ฆฌ๋์ง ์์ ์ํ์์ commit์ ํ๊ฑฐ๋, ๋ค์ ๋์๊ฐ์ ์์ ํ commit์ ํด์ผํ ๋ ๋ณ๊ฒฝ ํ์ผ์ ๊ทธ๋๋ก๊ฐ์ง๊ณ ์ด์ ์์ ์ผ๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋จ
- ๋ค๋ง, ๋ค์ commit์ ํ์์ ๋, ์ด ๋ํ local repository์ remote repository์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํจ
- remote repository์ ์ต์ ์ํ๋ฅผ local repository๋ก ๋น๊ฒจ์ค๋ ๋ฐฉ๋ฒ : ๐ git pull origin master
- ๊ฐ์ ๋ก remote repository์ ์ํ๋ฅผ local repository ๊ฐ์ ธ์ค๋ฉด, ์๋ก ๋ถ์ผ์นํ๊ธฐ ๋๋ฌธ์ conflict์ด ๋ฐ์
- conflict์ด ๋ฐ์ํ๋ฉด, ์ด๋ค ๋ด์ฉ์ ๊ธฐ์ค์ผ๋กํ ์ง ์ ํ ํ, ๋ค์ commit๊ณผ push๋ฅผ ์งํํ๋ฉด๋จ
- ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ ์ถฉ๋์ํฉ์ ์์น ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ push๋ฅผ ์ฃผ๋ก ์ฌ์ฉํจ
- ๐ git push origin master --force
>> git reset HEAD^
>> git pull origin master
3) Soft Reset
- Soft Reset ๋ฐฉ๋ฒ : ๐ git reset --soft HEAD^
- "--soft"d ์ต์
์ผ๋ก ์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก soft reset ๋ช
๋ น ๊ฐ๋ฅ
- soft rest์ผ๋ก ๋์๊ฐ๋ฉด, ๋์๊ฐ ์์ ์ดํ์ ํ์ผ์ stage area์ ์์น์ํค๊ณ commit ์์ ์ ์ด๋ํจ
- ์ด๋ unstage ์์ญ์ ์์
์ค์ธ ํ์ผ์ด ์์ ๋, ์ด ํ์ผ๋ค๊ณผ ์ด์ ์์ ์ผ๋ก ๋์๊ฐ ์ญ์ ๋์ง ์๊ณ ์ด์๋ ํ์ผ๋ค์ด ์์ด์ง ์๊ณ ์ํ ๋ ์ฌ์ฉ
- ๋๋ถ๋ถ์ ์์ ์ญ์ ํ๋ hard reset์ ์ฌ์ฉํ๊ฑฐ๋, ํ์ผ์ stage area์ ์ด๋ ค๋๋ mixed reset์ ์ฃผ๋ก ์ฌ์ฉ
>> git reset --soft HEAD^