๊น์์ ๊ณผ๊ฑฐ์ ํน์ commit์ผ๋ก ๋์๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
ํน์ commit์ผ๋ก ๋์๊ฐ๊ณ ์ดํ์ commit๋ค์ ์ญ์ ํ๋ reset
๊ณผ
ํน์ commit์ ์ ์ํ๋ก ๋๋๋ฆฌ๋ฉด์, ๋๋์๊ฐ๋ค๋ ๊ธฐ๋ก์ ์๋ก์ด commit์ผ๋ก ๋จ๊ธฐ๋ revert
๊ฐ ์์ต๋๋ค.
reset์ ๊ณผ๊ฑฐ ํน์ commit์ผ๋ก ๋์๊ฐ๋ฉฐ, ์ดํ์ commit๋ค์ ๋ฌดํจํํฉ๋๋ค.
git reset [commit hash]
ํน์ commit ์ดํ์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ์ด๋ป๊ฒ ๋จ๊ฒจ๋๋๋์ ๋ฐ๋ผ 3๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
git reset --hard
: ์ดํ์ commit๊ณผ ๋ณ๊ฒฝ๋ด์ญ๋ค์ ๋ชจ๋ ์ญ์ ํ๋ค.
git reset --soft
: ์ดํ์ commit์ ์์ด์ง์ง๋ง, ๋ณ๊ฒฝ ๋ด์ญ์ staging area์ ๋จ๊ฒจ๋๋ค.
git reset --mixed
(default): ์ดํ์ commit์ ์์ด์ง์ง๋ง, ๋ณ๊ฒฝ ๋ด์ญ์ unstage์ํ๋ก ๋จ๊ฒจ๋๋ค.
git reset -- hard
ํ
์คํธ๋ฅผ ์ํด ์์๋๋ก first commit, second commit, third commit์ ๋จ๊ฒผ์ต๋๋ค.
hard ์ต์
์ผ๋ก first commit์ผ๋ก ๋์๊ฐ๋ณด๊ฒ ์ต๋๋ค. git reset --hard [first commit]
first commit์ผ๋ก ๋์๊ฐ์ต๋๋ค. git log๋ฅผ ์ฐ์ด๋ณธ ๊ฒฐ๊ณผ, second commit, third commit์ ์ญ์ ๋๊ณ first commit๋ง ๋จ์ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค. ์์ ์ค ์ด๋ ํ์ผ์ first commit์ดํ์ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ชจ๋ ์์ด์ง, first commit ์์ ์ผ๋ก ๋ณต๊ตฌ๋ฉ๋๋ค.
git reset -- soft
soft์ต์ ๋ hard์ต์ ๊ณผ ๊ฐ์ด second commit, third commit์ ์ญ์ ํ๊ณ first commit๋ง ๋จ๊ฒจ๋ก๋๋ค. ํ์ง๋ง ๋ณ๊ฒฝ ๋ด์ญ์ ์์ด์ง์ง ์๊ณ staging area์ ๋จ์์์ต๋๋ค.
์ฆ, add
์์ด commit์ ์งํ ํ ์ ์์ต๋๋ค.
git reset -- mixed
๋ฐ๋ก ์ต์
์ ์ง์ ํ์ง ์๊ณ git reset [์ปค๋ฐ ๋ฒํธ]
๋ช
๋ น์ด๋ฅผ ์ฐ๋ฉด ์ ์ฉ๋๋ ๊ธฐ๋ณธ ์ต์
์
๋๋ค.
mixed์ต์ ๋ hard์ต์ ๊ณผ ๊ฐ์ด second commit, third commit์ ์ญ์ ํ๊ณ first commit๋ง ๋จ๊ฒจ๋ก๋๋ค. ๋ณ๊ฒฝ ๋ด์ญ์ ์์ด์ง์ง ์๊ณ unstage์ํ๋ก ๋จ์์์ต๋๋ค(add ์ด์ ์ ์ํ) hard์ soft์ ์ค๊ฐ ๋ฒ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ฆ, commit์ ํ๊ณ ์ถ๋ค๋ฉด add
๋ก staging area์ ์ฌ๋ฆฌ๊ณ commit์ ์งํํ๋ฉด ๋ฉ๋๋ค.
์ปค๋ฐ์ ๋๋ฆฌ๋ ๊ฒ ์ด์ธ์๋ reset
์ staging area๋ก add ํ ๊ฑธ ์ทจ์ํ๋๋ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. add๋ก staging area์ ํ์ผ์ ์ฌ๋ฆฌ๊ณ git reset [ํ์ผ๋ช
]
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉ ํด์ฃผ๋ฉด add ํ๊ธฐ ์ด์ ์ ์ํ๋ก ๋์๊ฐ๋๋ค. ์ฆ, add ๋ช
๋ น์ด๊ฐ ํ ์์
๋ง ๋๋๋ ค์ค๋๋ค!
์๊ฒฉ ์ ์ฅ์์ ์ด๋ฏธ push๋ฅผ ํ ์ํ๋ผ๋ฉด reset์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ๋ง์ฝ pushํ ์ดํ ๋ก์ปฌ์์ reset์ ํ๋ค๋ฉด, ๋ก์ปฌ๊ณผ ์๊ฒฉ์ commit history๊ฐ ๋ฌ๋ผ์ ธ ์ถฉ๋์ด ์ผ์ด๋๋ฉฐ commit์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
revert๋ ํน์ commit์ ์ทจ์ํ๋ฉด์, commit์ ํ๊ธฐ ์ ์ ์ํ๋ก ๋๋๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋์๊ฐ ์ํ์์ ์๋ก์ด commit์ ์ถ๊ฐํฉ๋๋ค. reset๊ณผ๋ ๋ฌ๋ฆฌ, ๊ธฐ์กด commit ๋ด์ญ๋ค์ ๋ณด์กด๋๊ณ , ์๋ก์ด commit์ด ์ถ๊ฐ๋๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ํ์คํ ๋ฆฌ ์ ์ง ์ฐจ์์์๋ ์ข์ต๋๋ค.
git revert [commit hash]
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ commit ํ์คํ ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ "๊ตฌ์กฐ์ฒด ์์ฑ" commit์ ์ํ๋ก ๋์๊ฐ๊ณ ์ถ์ ์ ์๊ฒ ์ฃ ? ๊ทธ๋ด ๋ ์ต๊ทผ commit๋ถํฐ ์์ฐจ์ ์ผ๋ก revert์ํต๋๋ค.
commit "ํ๋กํผํฐ๋ช
์์ "
commit "๋ฉ์๋ ์ถ๊ฐ"
commit "ํ๋กํผํฐ ์ถ๊ฐ"
commit "๊ตฌ์กฐ์ฒด ์์ฑ"
๋จผ์ "ํ๋กํผํฐ๋ช
์์ " ์ ์ทจ์ํ๊ณ revert "ํ๋กํผํฐ๋ช
์์ "
๊ทธ ๋ค์ "๋ฉ์๋ ์ถ๊ฐ" ๋ฅผ ์ทจ์ํ๊ณ revert "๋ฉ์๋ ์ถ๊ฐ"
๊ทธ ๋ค์ "ํ๋กํผํฐ ์ถ๊ฐ" ๋ฅผ ์ทจ์ํด์ผ ํฉ๋๋ค. revert "ํ๋กํผํฐ ์ถ๊ฐ"
revert "ํ๋กํผํฐ ์ถ๊ฐ"
revert "๋ฉ์๋ ์ถ๊ฐ"
revert "ํ๋กํผํฐ๋ช
์์ "
commit "ํ๋กํผํฐ๋ช
์์ "
commit "๋ฉ์๋ ์ถ๊ฐ"
commit "ํ๋กํผํฐ ์ถ๊ฐ"
commit "๊ตฌ์กฐ์ฒด ์์ฑ"
์์ฐจ์ ์ผ๋ก revertํ์ง ์๊ณ , ์ค๊ฐ commit๋ง revertํ๋ค๋ฉด ์ถฉ๋์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
git revert --no-commit
revertํ ๊ฒฐ๊ณผ๋ฅผ commitํ์ง ์๊ณ , stage ์ํ๋ง ์ ์งํ๋ ค๋ฉด git revert --no-commit
๋๋ git revert -n
์ต์
์ ์ฌ์ฉํฉ๋๋ค.
git revert [1๋ฒcommit hash][2๋ฒcommit hash]...
์ฌ๋ฌ๊ฐ์ commit์ ํ๊บผ๋ฒ์ revertํ ์๋ ์์ต๋๋ค.
git revert [ํ๋กํผํฐ๋ช
์์ hash] [๋ฉ์๋ ์ถ๊ฐ hash] [ํ๋กํผํฐ ์ถ๊ฐ hash]
๐ ์ฐธ๊ณ ๋ธ๋ก๊ทธ
[Git] ๋ช
๋ น์ด(5) - reset, revert
git reset, revert๋ก ์ด์ ์ปค๋ฐ์ผ๋ก ๋๋ฆฌ๊ธฐ