Dev_TIMI

์Šค๋‚ต๊นƒ ๐Ÿช - ์ค‘๊ธ‰ํŽธ #9: Git Reset vs Revert vs Checkout vs Restore ์™„๋ฒฝ ์ •๋ฆฌ

by its_TIMI

Git์„ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•˜์ง€๋งŒ 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

ํ™œ๋™ํ•˜๊ธฐ