๐ŸคผGit

git reflog, git ์‹ค์ˆ˜ ํ–ˆ์„ ๋•Œ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

hellohailie 2023. 4. 23. 00:50

reflog = reference log ์ฐธ์กฐ ๊ธฐ๋ก์˜ ์ค„์ž„๋ง

 

ls .git
cd logs

์‹ค์ˆ˜ํ•˜๊ฑฐ๋‚˜ ๊นƒ ๋กœ๊ทธ์—์„œ ๋”์ด์ƒ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋œ ์ปค๋ฐ‹์˜ ํ•ด์‹œ์— ์ ‘๊ทผํ•ด์•ผํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค!

 

 

์ฃผ์˜!!

1. reflog๋Š” ์ง€์—ญ์ ์ด๋‹ค!

(์˜ค์ง ๋‚ด ์ปดํ“จํ„ฐ์˜ ์ฐธ์กฐ ๋ชฉ๋ก์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ์„ ์ €์žฅํ•œ๋‹ค. )

 

2. ์˜๊ตฌ์ ์ด์ง€ ์•Š๋‹ค!

์•ฝ 90์ผ์ด ์ง€๋‚˜๋ฉด ๋งŒ๋ฃŒ๋œ๋‹ค. 

 

gut reflow show HEAD or ๋ธŒ๋žœ์น˜๋ช…

 

git relow show HEAD vs git log

๊ฐ™์ง€ ์•Š๋‹ค!!

git log์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด ๋‚ด ๋ธŒ๋žœ์น˜ ์ฒดํฌ์•„์›ƒ์„ ํ•˜๋Š” ๊ฒƒ์—๋Š” ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ธฐ์ง€ ์•Š์Œ! ๊ทธ์ € ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋ฟ์ด๋‹ค. 

 

HEAD@{2} => 2๋ฒˆ์˜ ์›€์ง์ž„ ์ „์— ํ—ค๋“œ๊ฐ€ ์–ด๋”” ์žˆ์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค. 

 

git checkout HEAD~2

ํ—ค๋“œ์˜ ๋ถ€๋ชจ์™€ ๊ทธ ๋ถ€๋ชจ๋ฅผ ์˜๋งˆํ•œ๋‹ค. (์กฐ๋ถ€๋ชจ์˜ ์ปค๋ฐ‹๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. )

 

git reflog HEAD@{2}

์ปค๋ฐ‹ ์กฐ์ฐจ ์•„๋‹์ˆ˜๋„ ์žˆ๋‹ค. ๋ธŒ๋žœ์น˜๋งŒ ๋ฐ”๊พผ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

reflog์˜ ๋ชจ๋“  ํ•ญ๋ชฉ ํ•˜๋‚˜ํ•˜๋‚˜์—๋Š” ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์žˆ๋‹ค. 

git reflog master@{one.week.age}

git checkout bugfix@{2.days.ago}

git diff main@{0} main@{yesterday}

 

 

โ˜…์‹ค์ˆ˜ ํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€, ์žƒ์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ปค๋ฐ‹๊ณผ ์ •๋ณด๋ฅผ ๋˜์ฐพ์•„์˜ค๋Š” ๋ฐฉ๋ฒ•!

(ex, reset ์ด๋‚˜ reset --hard๋ฅผ ํ•ด์„œ ์ปค๋ฐ‹์„ ์žƒ์–ด๋ฒ„๋ฆฐ ๋’ค, reflog๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๊ฒƒ)

(git log์—์„œ๋Š” ์—†์–ด์กŒ์ง€๋งŒ git reflog์—๋Š” ๋‚จ์•„์žˆ๋‹ค!)

git reflog show ๋ธŒ๋žœ์น˜๋ช…

ํ•ด๋‹นํ•˜๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์ž‘์—…ํ–ˆ๋˜ ๋ชจ๋“  ํ™˜๊ฒฝ๋“ค์˜ ์ปค๋ฐ‹ํ•ด์‹œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ์ปค๋ฐ‹ํ•ด์‹œ๋ฅผ ํ†ตํ•ด checkout์„ ํ•˜๋ฉด ๋œ๋‹ค. 

 

git checkout ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ์ปค๋ฐ‹ํ•ด์‹œ

=> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ—ค๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์„œ ๊ทธ๋ƒฅ ๋ณผ ์ˆ˜๋งŒ ์žˆ๋‹ค. 

 

git reset --hard ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ์ปค๋ฐ‹ํ•ด์‹œ

=> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด HEAD๊ฐ€ ์ด๋™๋œ๋‹ค. 

 

 

โ˜… ์–ด๋–ป๊ฒŒ rebase๋ฅผ ๋˜๋Œ๋ฆฌ ์ˆ˜ ์žˆ๋Š”์ง€, git rebase๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์™„์ „ํžˆ ๋ฎ์–ด ์“ฐ์—ฌ์ง„ ์ปค๋ฐ‹์„ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

(reflog๋กœ rebase ์ทจ์†Œํ•˜๊ธฐ)

 

 

rebase๋Š” ์ปค๋ฐ‹์„ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด๋‹ค! ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•ด์„œ ๊ตฌ๋ฒ„์ „์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. 

 

git reflog ๋ธŒ๋žœ์น˜๋ช…
git reset --hard ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ์ปค๋ฐ‹ํ•ด์‹œ

 

๋ชจ๋“  ์ปค๋ฐ‹์€ ๊ทธ ํŒŒ์ผ ๋‚ด๋ถ€์— ๊ทธ๋“ค์˜ ๋ถ€๋ชจ ๋˜๋Š” ์กฐ๋ถ€๋ชจ๋„ ์ €์žฅํ•˜๊ณ   ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์…‹ํ•˜๋ฉด, ์›๋ž˜๋Œ€๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค.