๐ŸŽ ์ฝ”๋“œ์งœ๋‹ค๊ฐ€ ์‹ค์ˆ˜ํ–ˆ๋‹ค ๋˜๋Œ์•„๊ฐ€์ž (git revert, reset, restore)

์œ ์ง„ยท2025๋…„ 5์›” 19์ผ

git

๋ชฉ๋ก ๋ณด๊ธฐ
7/13

commit๋งŒ ์ฃผ๊ตฌ์žฅ์ฐฝ ํ•˜๋‹ค ๋ณด๋ฉด ์‹ค์ˆ˜ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๋‹คํ–‰ํžˆ git์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ ์–ธ์ œ๋“  ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ git restore, git revert, git reset ๋ช…๋ น์–ด๋กœ ํŒŒ์ผ ๋ณต๊ตฌ, ์ปค๋ฐ‹ ์ทจ์†Œ, ์‹œ๊ฐ„ ๋˜๋Œ๋ฆฌ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐธ๊ณ ๋กœ ์˜ค๋Š˜ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ํฌ๊ฒŒ ๋งŽ์ด ์“ฐ๋Š” ๋‚ด์šฉ์€ ์•„๋‹ˆ๋ผ์„œ ๋‚˜์ค‘์— ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ์ฐพ์•„์„œ ์“ฐ๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ผ๋‹จ ์•Œ์•„๋‘๊ณ  ๋‚˜์ค‘์— ์“ฐ๋ฉด ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์“ธ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์ผ๋‹จ ์ž˜ ๋ฐฐ์›Œ๋ณด์ž.

๊น”๋”ํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ž‘์—… ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ™˜๊ฒฝ์„ ์„ธํŒ…ํ•ด๋ณธ๋‹ค.

์ผ๋‹จ commit ๋ช‡ ๋ฒˆ ํ•ด๋ณด๊ธฐ

์ผ๋‹จ ๋‚œ git2๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ƒˆ ์ž‘์—… ํด๋”์—์„œ git init๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ํŒŒ์ผ 3๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ๊ฐ ์ปค๋ฐ‹ํ•ด๋ณด์ž.
a, b, c ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ๊ฐ commitํ–ˆ๋‹ค๋ฉด git log --oneline์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด,

์œ„์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. ์ด์ „์— ํ•™์Šตํ–ˆ๋“ฏ์ด ์™ผ์ชฝ ๋…ธ๋ž€์ƒ‰ ๊ธ€์ž๊ฐ€ ์ปค๋ฐ‹์˜ ๊ณ ์œ  ID๊ณ , ์ด ID๋ฅผ ์ด์šฉํ•ด ํŠน์ • commit์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด git restore

ํŒŒ์ผ ์ˆ˜์ •์ด ์ž˜๋ชป๋์„ ๋•Œ Ctrl + Z๋กœ ๋˜๋Œ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ปดํ“จํ„ฐ๊ฐ€ ๊บผ์ ธ์„œ ๊ทธ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •์‚ฌํ•ญ์ด ๋งŽ๋‹ค๋ฉด restore ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด cํŒŒ์ผ์— ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋งˆ๊ตฌ์žก์ด๋กœ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ด ์ฝ”๋“œ๊ฐ€ ์ž˜ ์•ˆ๋˜๋ฉด ์ตœ๊ทผ commit๋œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
๋ฐ”๋กœ restore ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ ์ €์žฅํ•˜๊ณ  ์ƒ์‡ผ๋ฅผ ํ•ด๋‘๊ณ  git restore c๋งŒ ์ž…๋ ฅํ•˜๋ฉด

๊น”๋”ํ•˜๊ฒŒ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌํ•ด๋ณด๋ฉด

  • git restore ํŒŒ์ผ๋ช…: ์ตœ๊ทผ ์ปค๋ฐ‹ ์ƒํƒœ๋กœ ํŒŒ์ผ์„ ๋˜๋Œ๋ฆฐ๋‹ค.
  • git restore --source ์ปค๋ฐ‹์•„์ด๋”” ํŒŒ์ผ๋ช…: ํŠน์ • ์ปค๋ฐ‹ ์‹œ์ ์œผ๋กœ ํŒŒ์ผ์„ ๋ณต๊ตฌํ•œ๋‹ค.
  • git restore --staged ํŒŒ์ผ๋ช…: staging ์ƒํƒœ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ณต๊ตฌ์™€๋Š” ๋ณ„๊ฐœ๋‹ค.)

commit์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด git revert

์ฝ”๋“œ๋ฅผ ์—ด์‹ฌํžˆ ์งœ๋‹ค๊ฐ€ ๊ณผ๊ฑฐ ์ปค๋ฐ‹ ํ•˜๋‚˜๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ

์˜ˆ๋ฅผ ๋“ค์–ด์„œ b ํŒŒ์ผ์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‹ค์Šตํ•ด๋ณด์ž.
b์ปค๋ฐ‹์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด git revert ์ปค๋ฐ‹์•„์ด๋””๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์ปค๋ฐ‹์„ ์ทจ์†Œํ•œ ์ƒˆ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ ์•„์˜ˆ b์ปค๋ฐ‹์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, b์ปค๋ฐ‹์ด ์‚ฌ๋ผ์ง„ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ bํŒŒ์ผ์„ ์ง€์šฐ๊ณ  ์‹ถ์œผ๋‹ˆ git revert 64dd02f๋ฅผ ์ž…๋ ฅํ•ด๋ณด๊ฒ ๋‹ค.

์ด๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ํŒŒ์ผ์ด ๋œฌ๋‹ค. ํฐ๋”ฐ์˜ดํ‘œ ์•ˆ์— commit ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Ÿฌ๊ณ  ๋‹ซ๊ณ  ๋‹ค์‹œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด,

์ด๋ ‡๊ฒŒ bํŒŒ์ผ์ด ์‚ฌ๋ผ์ง„(bํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๋˜ commit์ด ์‚ฌ๋ผ์ง„) ์ƒํƒœ์˜ commit์ด ํ•˜๋‚˜ ์ƒ์„ฑ๋œ๋‹ค.

์ดํ›„ ์ปค๋ฐ‹์€ bํŒŒ์ผ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

revertํ•  ์‹œ ์ฐธ๊ณ 

  • git revert HEAD: ์ตœ๊ทผ ์ปค๋ฐ‹๋งŒ ์ทจ์†Œํ•  ๋•Œ ํŽธ๋ฆฌํ•จ
  • ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์„ ํ•œ ๋ฒˆ์— revertํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ commit id๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋จ
  • merge ์ปค๋ฐ‹๋„ revertํ•˜๋ฉด ๋ณ‘ํ•ฉ์ด ์ทจ์†Œ๋œ๋‹ค.

์ „๋ถ€ ์‹œ๊ฐ„์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด git reset

์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœ ์ง€์˜ฅ์—์„œ ์—ด์‹ฌํžˆ ์‚ด๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ 7์‚ด ์–ด๋ฆฐ ์‹œ์ ˆ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด,, ๊ทธ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ git์—์„œ๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋™์•ˆ ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๊ฐ‘์ž๊ธฐ b์ปค๋ฐ‹์ด ๋งŒ๋“ค์–ด์ง„ ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
๊ทธ๋ ‡๋‹ค๋ฉด git reset --hard 64dd02f(b์ปค๋ฐ‹์•„์ด๋””) ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ b ์ปค๋ฐ‹ ์‹œ์ ์œผ๋กœ ๋ชจ๋“  ๊ฑธ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ๊ทธ ์ดํ›„์˜ ๊ธฐ์–ต์€ ๋ชจ๋‘ ์žƒ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์—… ํด๋” ํŒŒ์ผ๋“ค๊นŒ์ง€๋„ ๋ชจ๋‘ ๊ทธ๋•Œ์˜ ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

  • ํ˜‘์—… ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ๋Š” reset์„ ํ”ผํ•˜์ž. ํŒ€์› ์ฝ”๋“œ๊ฐ€ ์‚ฌ๋ผ์ ธ ํŒ€์›๊ณผ ์›์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • untracked ํŒŒ์ผ(์Šคํ…Œ์ด์ง• ์•ˆ ๋œ ํŒŒ์ผ)์€ ์œ ์ง€๋œ๋‹ค. ์ด๋“ค์€ git clean ๋ช…๋ น์–ด๋ฅผ ์ฐพ์•„์„œ ์“ฐ๋ฉด ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค.

reset ์˜ต์…˜

reset ๋’ค์— hard / soft / mixed ์„ค์ •์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

  • git reset --hard b์ปค๋ฐ‹์•„์ด๋””: ํŒŒ์ผ๊นŒ์ง€ ๋ชจ๋‘ ๊ทธ ์‹œ์ ์œผ๋กœ ์™„์ „ํžˆ ๋˜๋Œ๋ฆผ
  • git reset --soft b์ปค๋ฐ‹์•„์ด๋””: bํŒŒ์ผ์— ๋Œ€ํ•œ ์ปค๋ฐ‹์€ ์ทจ์†Œ๋˜์ง€๋งŒ, staging์—๋Š” ๋‚จ์Œ
  • git reset --mixed b์ปค๋ฐ‹์•„์ด๋””: ์ปค๋ฐ‹ ์ทจ์†Œ, ๋ณ€๊ฒฝ์‚ฌํ•ญ๋„ staging ํ•ด์ œ. ์ด์ œ git add ํ•˜๊ณ  commit ํ•˜๊ณ  ๊ทธ๋Ÿด ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฒ€ํ†  ํ›„์— ๋‹ค์‹œ ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์œผ๋ฉด --soft๋‚˜ --mixed๋ฅผ ์‚ฌ์šฉํ•˜์ž.

์ˆ™์ œ๊ฐ€ ์žˆ๋Š”๋ฐ ์‹ค์Šตํ•ด๋ณด๋ฉด์„œ ๋‹คํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ง์ ‘ํ•ด๋ณด๋Š” ๊ฒŒ ํ™•์‹คํžˆ ์ดํ•ด๊ฐ€ ์‰ฌ์šฐ๋‹ˆ ๋‹ค๋“ค ์ง์ ‘ ํ•ด๋ณด๋„๋ก ํ•˜์ž.

0๊ฐœ์˜ ๋Œ“๊ธ€