๋ก์ปฌ์์ ์ปค๋ฐ์ ์ํด ์คํ ์ด์ง ์์ญ์ ์ถ๊ฐํ ์์ ๋ด์ฉ์ ๋๋๋ฆฌ๊ธฐ ์ํด์๋ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
git reset
์ ๋ช ๋ น์ด๋ ์์ ํ ์ฝ๋๊ฐ ๋ฐ์๋ ์คํ ์ด์ง ์์ญ์ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐ์ํ ์ปค๋ฐ์ํ๋ก ๋๋๋ฆฝ๋๋ค. ํ์ง๋ง ์ฌ๋ฌ๋ถ์ ์์ ๋๋ ํ ๋ฆฌ์ ์์ ํ ๋ด์ฉ๋ค์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ๋ถ์ด ์์ ํ ์์ค๋ฅผ ๋ค์ ์ปค๋ฐํ ์ ์์ต๋๋ค. ๋ง์ผ ์ด๋ฏธ ์คํ ์ด์ง ์์ญ์ ๋ฐ์๋ ์์ ํ ํ์ผ๋ค ์ค์์ ํ๋์ ํ์ผ๋ง ์ปค๋ฐ์์ ์ ๊ฑฐํ๊ธฐ๋ฅผ ์ํ ๊ฒฝ์ฐ, ์๋ ๋ช ๋ น์ ์คํํฉ๋๋ค.
git reset <file>
์ด ๋ช ๋ น์ด๋ ์คํ ์ด์ง ์์ญ์์ ํด๋น ํ์ผ๋ง ์ ๊ฑฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ๋๋ ํ ๋ฆฌ์๋ ๋ณ๊ฒฝ๋ ํ์ผ ์ํ ๊ทธ๋๋ก ๋จ์ ์์ต๋๋ค.
๋ค์์ git reset ์ฌ์ฉ๋ฒ์ ๊ดํ ์์ ์
๋๋ค.
# ๋จผ์ index.php ์ tutorial.php ํ์ผ์ ์์ ํฉ๋๋ค.
# ์คํ
์ด์ง ์์ญ์ ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
$ git add .
# ๋ ํ์ผ์ ๊ฐ๊ฐ ์ปค๋ฐํด์ผํ๋ฏ๋ก
# tutorial.php ํ์ผ์ ์คํ
์ด์ง ์์ญ์์ ์ ๊ฑฐํฉ๋๋ค.
$ git reset tutorial.php
# index.php ํ์ผ์ ๋จผ์ ์ปค๋ฐํฉ๋๋ค.
$ git commit -m "Changed index.php"
# ๋ค์์ผ๋ก tutorial.php ํ์ผ์ ์ปค๋ฐํฉ๋๋ค.
$ git add tutorial.php
$ git commit -m "Changed tutorial.php"
๋ก์ปฌ ์ ์ฅ์์ ๋ฌธ์ ๊ฐ ์๊ฒจ ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ฅผ ๋ง์ง๋ง ์ปค๋ฐ ์ํ๋ก ๋ชจ๋ ๋๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค.
git reset --hard
์ด ๋ช
๋ น์ด๋ ์คํ
์ด์ง ์์ญ์ ๋ง์ง๋ง ์ปค๋ฐ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ๋ถ์ ๋ก์ปฌ์ ๋ณ๊ฒฝ๋ ํ์ผ๋ ๋๋๋ฆด ์ ์์ต๋๋ค.
--hard ๋ชจ๋๋ Git์ผ๋ก ํ์ฌ๊ธ ์์
๋๋ ํ ๋ฆฌ์ ๋ํ ๋ณ๊ฒฝ๋ค๋ ๋๋๋ฆด ์ ์๋๋ก ํฉ๋๋ค.
๋ฐ๋ผ์ ๋ก์ปฌ์์ ๊ฐ๋ฐํ ๋ชจ๋ ๊ฐ๋ฐ ๋ด์ฉ์ ์ด๊ธฐํํด๋ ๋๋์ง ๋ฐ๋์ ํ์ธ ํ ์คํํ์
์ผ ํฉ๋๋ค.
๋ค์์ git reset --hard ์ฌ์ฉ์ ๊ดํ ์์ ์
๋๋ค.
# ์๋ฑํ ์คํ์ ์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
# ๋จผ์ 'crazy.php' ํ์ผ์ ๋ง๋ค๊ณ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
# ๊ทธ๋ฆฌ๊ณ crazy.php ํ์ผ์ ์ปค๋ฐํฉ๋๋ค.
$ git add crazy.php
$ git commit -m "Started a crazy dev"
# crazy.php ํ์ผ์ ๋ค์ ์์ ํ๊ณ ๊ธฐํ ์ฌ๋ฌ ํ์ผ๋ค์ ์์ฑํ๊ณ ์์ ํฉ๋๋ค.
# ๊ทธ๋ฆฌ๊ณ ์์ ํ ๋ชจ๋ ํ์ผ์ ์คํ
์ด์ง ์์ญ์ ์ถ๊ฐํ๊ณ ์ปค๋ฐํฉ๋๋ค.
$ git add .
$ git commit -m "Continued dev"
# ํ
์คํธํ๊ณ ๋ง์นฉ๋๋ค.
# ์คํํ๊ธฐ ์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด ๋ชจ๋ ์์ ์ฌํญ์ ์ ๊ฑฐํฉ๋๋ค.
$ git reset --hard HEAD~2
git reset --hard HEAD~2 ๋ช
๋ น์ด๋ ํ์ฌ ๋ธ๋์น์์ ์ฌ๋ฌ๋ถ์ด ์์ ํ ์ด์ ์ ์ปค๋ฐ๋ค ์ค์ 2๋ฒ์งธ ์ปค๋ฐ ํฌ์ธํธ ์ํ๋ก ์ด๋ํจ๊ณผ ๋์์ ํด๋น ์ปค๋ฐ๋ค์ ๋ํ ๋ณ๊ฒฝ์ฌํญ๋ค์ด ์ด์ ์ํ๋ก ๋ณต๊ตฌ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ํ์คํ ๋ฆฌ์์ ์ด์ ์ ์ถ๊ฐ๋ 2๊ฐ์ ์ค๋
์ท์ด ์ ๊ฑฐ๋ฉ๋๋ค.
P.s. ๋ง์ผ ์ฌ๋ฌ๋ถ์ ๊ณต์ ์ ์ฅ์๋ก ์ด๋ฏธ push๋ฅผ ์๋ฃํ ์ํ์์ git reset --hard ๋ช
๋ น์ ์คํํ ๊ฒฝ์ฐ, ํด๋น ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ ๋ ์คํํด์๋ ์๋ฉ๋๋ค.