์ค๋ต๊น ๐ช - ์ค๊ธํธ #9: Git Reset vs Revert vs Checkout vs Restore ์๋ฒฝ ์ ๋ฆฌ
by its_TIMIGit์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ ค์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค.
ํ์ง๋ง Reset, Revert, Checkout, Restore ๋ฑ ๋น์ทํด ๋ณด์ด๋ ์ฌ๋ฌ ๋ช ๋ น์ด๊ฐ ์์ด,
์ด๋ค ์ํฉ์์ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ํผ๋์ค๋ฌ์ธ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ ๊ฐ ๋ช ๋ น์ด์ ์ฐจ์ด์ ๊ณผ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํ๊ณ ,
์ค์ ํ์ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค.
๐น Git์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๋ 4๊ฐ์ง ๋ฐฉ๋ฒ
Git์์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ด ํฌ๊ฒ 4๊ฐ์ง๊ฐ ์๋ค.
๊ฐ๊ฐ์ ์ฐจ์ด์ ์ ์๋ ํ๋ก ์ ๋ฆฌํ๋ค.
๋น๊ต ํญ๋ชฉ | Reset (git reset) | Revert (git revert) | Checkout (git checkout) | Restore (git restore) |
๋ชฉ์ | ์ปค๋ฐ์ ๋๋๋ฆฌ๊ณ ์ด๋ ฅ์ ๋ณ๊ฒฝ | ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ด ๋ณ๊ฒฝ ์ทจ์ | ๋ธ๋์น ๋ณ๊ฒฝ ๋๋ ํน์ ์ปค๋ฐ ์ฒดํฌ์์ | ๋ณ๊ฒฝ ์ฌํญ์ ์ด๊ธฐํ |
์์ ๋์ | ์ปค๋ฐ | ์ปค๋ฐ | ๋ธ๋์น / ํน์ ํ์ผ | ํ์ผ ๋ณ๊ฒฝ ์ฌํญ |
ํ์คํ ๋ฆฌ ๋ณ๊ฒฝ ์ฌ๋ถ | O (์ด๋ ฅ ๋ณ๊ฒฝ๋จ) | X (์ด๋ ฅ ์ ์ง๋จ) | X (ํ์ผ ๋ณ๊ฒฝ ์์ด ์ด๋) | X (๋จ์ ๋ณ๊ฒฝ ์ด๊ธฐํ) |
ํ์ ๊ฐ๋ฅ ์ฌ๋ถ | โ ์ํ (์ด๋ ฅ์ด ๋ณ๊ฒฝ๋จ) | โ ์์ (์๋ก์ด ์ปค๋ฐ ์์ฑ) | โ ์์ (๋ธ๋์น ์ด๋) | โ ์์ (๋จ์ ํ์ผ ๋ณต๊ตฌ) |
์ฌ์ฉ ์์ | git reset --hard HEAD~1 | git revert HEAD | git checkout main | git restore --staged <ํ์ผ> |
๐น Git Reset: ํน์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฌ๊ธฐ (git reset)
git reset ๋ช ๋ น์ด๋ ํน์ ์ปค๋ฐ ์ด์ ์ผ๋ก ๋๋๋ฆฌ๊ณ , ๊ทธ ์ดํ์ ์ปค๋ฐ์ ์ญ์ ํ๋ ์ญํ ์ ํ๋ค.
โ ์ฌ์ฉ๋ฒ
git reset --soft HEAD~1 # ๋ง์ง๋ง ์ปค๋ฐ์ ์ญ์ ํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ๊ทธ๋๋ก ์ ์ง
git reset --mixed HEAD~1 # ๋ง์ง๋ง ์ปค๋ฐ ์ญ์ + ์คํ
์ด์ง ํด์
git reset --hard HEAD~1 # ๋ง์ง๋ง ์ปค๋ฐ ์ญ์ + ์์
๋ด์ฉ๋ ์ญ์ (์ฃผ์!)
๐จ ์ฃผ์:
• --hard ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ํ ์ญ์ ๋๋ฏ๋ก ๋ณต๊ตฌํ ์ ์๋ค.
• ์ด๋ฏธ pushํ ์ปค๋ฐ์์ reset์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ํ์๊ณผ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
๐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
โ ์์ง pushํ์ง ์์ ๋ก์ปฌ ์ปค๋ฐ์ ์ทจ์ํ๊ณ ์ถ์ ๋
โ ์ฌ๋ฌ ๊ฐ์ ์ปค๋ฐ์ ํ๋๋ก ํฉ์น๊ฑฐ๋ ์ ๋ฆฌํ ๋
๐น Git Revert: ์ปค๋ฐ์ ๋๋๋ฆฌ๋ ์๋ก์ด ์ปค๋ฐ ๋ง๋ค๊ธฐ (git revert)
git revert๋ ๊ธฐ์กด ์ปค๋ฐ์ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๋ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ ๋ค.
์ด์ ์ํ๋ก ๋์๊ฐ๋ฉด์๋ Git ์ด๋ ฅ์ ์์ ํ๊ฒ ์ ์งํ ์ ์์ด ํ์ ์ ์ ํฉํ๋ค.
โ ์ฌ์ฉ๋ฒ
git revert HEAD # ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ์ ๋๋๋ฆผ
git revert HEAD~2 # 2๊ฐ ์ ์ปค๋ฐ์ ๋๋๋ฆผ
๐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
โ ์ด๋ฏธ pushํ ์ปค๋ฐ์ ์ทจ์ํ๊ณ ์ถ์ ๋
โ ํ์ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ์ฌ๋์ด pull์ ๋ฐ์ ๋ ํผ๋์ ๋ฐฉ์งํ๊ณ ์ถ์ ๋
๐น Git Checkout: ๋ธ๋์น ๋ณ๊ฒฝ & ํน์ ํ์ผ ๋๋๋ฆฌ๊ธฐ (git checkout)
git checkout์ ํน์ ๋ธ๋์น๋ก ์ด๋ํ๊ฑฐ๋, ํน์ ์ปค๋ฐ์ ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ํ๋ค.
โ ์ฌ์ฉ๋ฒ
git checkout main # main ๋ธ๋์น๋ก ์ด๋
git checkout HEAD~2 -- index.html # index.html์ 2๊ฐ ์ ์ปค๋ฐ ์ํ๋ก ๋๋๋ฆผ
๐จ ์ฃผ์:
• git checkout์ ๋ธ๋์น ๋ณ๊ฒฝ๊ณผ ํ์ผ ๋ณ๊ฒฝ์ ํจ๊ป ์ฌ์ฉ๋์์ผ๋,
ํ์ฌ๋ git switch์ git restore๋ก ๊ธฐ๋ฅ์ด ๋ถ๋ฆฌ๋์๋ค.
• ๋ธ๋์น ๋ณ๊ฒฝ์ git switch, ํ์ผ ๋ณ๊ฒฝ์ git restore๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ช ํํ๋ค.
๐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
โ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ ๋
โ ํน์ ํ์ผ๋ง ๊ณผ๊ฑฐ ๋ฒ์ ์ผ๋ก ๋๋๋ฆด ๋
๐น Git Restore: ๋ณ๊ฒฝ ์ฌํญ ์ด๊ธฐํ (git restore)
git restore๋ ํน์ ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ด๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
ํ์ผ์ ์คํ ์ด์ง ์ด์ ์ํ๋ก ๋๋๋ฆฌ๊ฑฐ๋, ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ญ์ ํ ์๋ ์๋ค.
โ ์ฌ์ฉ๋ฒ
git restore index.html # index.html ํ์ผ ๋ณ๊ฒฝ ์ทจ์
git restore --staged index.html # staging๋ index.html์ unstaged ์ํ๋ก ๋ณ๊ฒฝ
๐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
โ git add ํ๋๋ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ๊ณ ์ถ์ ๋
โ ํน์ ํ์ผ์ ์๋ ์ํ๋ก ๋๋๋ฆฌ๊ณ ์ถ์ ๋
๐น ์์ฝ: ์ธ์ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๊น?
โ ์์ ํ ๋ณ๊ฒฝ ์ทจ์ ๋ฐฉ๋ฒ (ํ์ ๊ฐ๋ฅ)
• ์ด๋ฏธ pushํ ์ปค๋ฐ์ ์ทจ์ํ๊ณ ์ถ๋ค → git revert
• ๋ธ๋์น๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค → git checkout / git switch
• ํ์ผ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ๊ณ ์ถ๋ค → git restore
โ ์กฐ์ฌํด์ผ ํ ๋ช ๋ น์ด (๋ก์ปฌ ์์ ์ ์ ์ฉํ์ง๋ง ์ฃผ์ ํ์)
• ์ต๊ทผ ์ปค๋ฐ์ ์ญ์ ํ๊ณ ์ถ๋ค → git reset --soft/mixed
• ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ ๋ฆฌ๊ณ ์ถ๋ค → git reset --hard (์ฃผ์!)
๐ ๋ง๋ฌด๋ฆฌํ๋ฉฐ…
โ Git์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
โ reset vs revert vs checkout vs restore ๊ฐ๋ ์ ์ ํํ ์ดํดํด์ผ ํ๋ค.
โ ์ค๋ฌด์์๋ ํ์ ์ด ํ์ํ๋ฏ๋ก revert๋ restore์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
โ reset --hard๋ ๋ก์ปฌ์์๋ง ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํ ํ๋ก์ ํธ์์๋ ์ฌ์ฉ ๊ธ์ง! ๐จ
์ด์ Git์์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆด ์ ์์ ๊ฒ์ด๋ค.
Git์์ ์์ ํ๊ฒ ๋กค๋ฐฑํ๋ ๋ฒ์ ํ์คํ ์ตํ๊ณ , ๋ค์ ์ค๋ต๊น๋ ๊ธฐ๋ํด๋ณด์! ๐
'์ค๋ต ๊น๐ช > ์ค๊ธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Dev_TIMI
its_TIMI