Restoring a File to an Earlier Version
خلاصه: فایل رو به آخرین وضعیت در آخرین کامیت برگردون (ریستورش کن).
git restore file1.js
فایل رو به آخرین وضعیتش در کامیتِ مورد نظر برگردون (ریستورش کن).
git restore -—source=HEAD~1 file1.js
حال میدونین زمانی که گیت یک فایل رو ردیابی میکنه تمامی نسخههای اون فایل رو در دیتابیس نگه میداره. و این بدین معناست که اگر خرابکاری کردین همیشه میتونیم یک فایل یا مسیر رو به نسخهی قبلی برگردونیم. در این نمونه میخوایم یک فایل رو پاک کنم و نشونتون بدم که چطور بازیابیش کنیم. خیلی ساده ست. خب ما file1.js
رو قراره پاک کنیم. بهتون گفتم که اگر از دستور rm
در لینوکس یا یونیکس استفاده کنیم فقط فایل رو از مسیر کاری پاک میکنه. دستورِ git rm
هم هست. این دستور فایل رو هم از مسیر کاری و هم از Staging area پاک میکنه.
git rm file1.js
وضعیتِ file1.js پس از دستورِ بالا:
D file1.js
با توجه به خروجیِ بالا، در staging area یک فایل حذفشده داریم.
حالا بیاین کامیت بسازیم.
git commit -m "Delete file1.js"
خیلی خب. حالا بیاین بگیم که ای بابا نباید این فایل رو پاک میکردیم میتونیم آخرین کامیت رو پاک کنیم. که قراره در موردش در این دوره بعداً صحبت کنیم اما در این جلسه میخوام در مورد بازیابی یک فایل به نسخهی قبلی صحبت کنم نه پاکسازی یک کامیت.
خب ی نگاهی به تاریخچمون بندازیم.
git log --oneline
905cf09 (HEAD -> master) Delete file1.js
921a2ff Remove the bin directory that was accidentally committed.
d601b90 Include bin/ in gitignore.
42ce2fb Add bin.
e5fd9a2 Add gitignore
7e3f6b1 Refactor code.
138c8ef Remove unused code.
8f092f7 Fix the bug that prevented the users from signing up.
3b0003b Initial commit.
خیلی خب در بالا تاریخچه رو میبینیم. میخوایم که file1.js
رو به کامیت قبل از آخرین کامیت برگردونیم که آیدیش 921a2ff
هست.
بصورتِ پیشفرض گیت، فایل رو از محیط بعدی بازیابی میکنه. خب اگر فایلی که میخوایم برگردونیم در مسیر کاری هست گیت از staging area بازیابیش میکنه و اگر فایل در staging area هست از آخرین snapshot یا آخرین کامیت بازیابیش میکنه.
میخواهیم رفتارِ پیشفرض رو تغییر بدیم. میخواهیم که از کامیت یکی مونده به آخری فایل رو بازیابی کنیم.
git restore -—source=HEAD~1 file1.js
یه status کوتاه داشته باشیم.
?? file1.js
حالا یه file1.js
ردیابینشده جدید داریم.