git restore
استعادة الملفات في مجلد العمل أو منطقة التجهيز
يعيد الأمر 'git restore' الملفات إلى نسخة معروفة. افتراضيًا يستبدل ملف العمل بنسخته المجهَّزة، فتضيع تعديلاتك. ومع --staged يُخرج الملف من منطقة التجهيز ويُبقي تعديلاتك على القرص. ومع --source تستعيد ملفًا كما كان في أي commit. أُضيف في Git 2.23 ليتولّى جزء استعادة الملفات من git checkout.
الصيغة
git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...الخيارات
اختيار الخيار المناسب
restore مقابل الأوامر القديمة
الإجراءات نفسها، قديمًا وحديثًا
| الأمر | المكافئ القديم | الأثر |
|---|---|---|
git restore app.js | git checkout -- app.js | التخلّص من التعديلات غير المجهَّزة |
git restore --staged app.js | git reset app.js | إلغاء التجهيز مع الإبقاء على التعديلات |
git restore --source=HEAD~1 app.js | git checkout HEAD~1 -- app.js | ملف من commit قديم |
أمثلة
التخلّص من التعديلات
git restore app.jsالتخلّص من التغييرات غير المجهَّزة في app.js.
إلغاء تجهيز ملف
git restore --staged app.jsإخراج app.js من منطقة التجهيز مع الإبقاء على التعديلات.
ملف من commit قديم
git restore --source=HEAD~2 app.jsاستعادة app.js كما كان قبل commitَين.
أمثلة على سير العمل
git add .كل شيء مجهَّز
git restore --staged README.mdأُلغي تجهيز README.md
git commit -m "Add to cart"الـ commit يستثني README.md
حل المشكلات
error: pathspec 'x' did not match any file(s) known to git
السبب: الملف غير متتبَّع أو المسار خاطئ
تحقّق من المسار بـ git status؛ لا يعمل restore إلا على الملفات المتتبَّعة
استعدت ملفًا فضاعت تعديلاتي
السبب: يكتب git restore فوق ملف العمل
التعديلات غير المحفوظة ضاعت؛ قد يحتفظ بها سجل التراجع في محرّرك. في المرة القادمة نفّذ git stash أولًا
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓شغّل git diff قبل git restore لترى ما ستتخلّص منه.
- ✓استخدم git restore --staged لإلغاء التجهيز — لا يلمس تعديلاتك أبدًا.
- ✓فضّل git restore على git checkout للملفات: اسمه يدلّ على ما يفعله.
أخطاء متكررة
- ✗تشغيل git restore <file> على تعديلات أردت الاحتفاظ بها — التعديلات المُتخلَّص منها لا تُسترجع.
- ✗توقّع أن يتخلّص git restore --staged من تعديلك: هو يلغي تجهيزه فقط.
- ✗استخدام git restore للتراجع عن commit — هو يستعيد الملفات؛ للـ commits استخدم git reset أو git revert.
الأسئلة الشائعة
يغيّر git restore الملفات. أما git reset فينقل الفرع إلى commit آخر (ويمكنه إعادة تعيين الملفات أيضًا).
ليس للتعديلات المُتخلَّص منها: Git لم يخزّنها قط. أما إلغاء التجهيز بـ --staged فلا يُضيّع شيئًا.
Git 2.23 أو أحدث. في الإصدارات الأقدم استخدم git checkout -- <file> وgit reset <file>.