git restore

اللقطات الأساسية

استعادة الملفات في مجلد العمل أو منطقة التجهيز


يعيد الأمر 'git restore' الملفات إلى نسخة معروفة. افتراضيًا يستبدل ملف العمل بنسخته المجهَّزة، فتضيع تعديلاتك. ومع --staged يُخرج الملف من منطقة التجهيز ويُبقي تعديلاتك على القرص. ومع --source تستعيد ملفًا كما كان في أي commit. أُضيف في Git 2.23 ليتولّى جزء استعادة الملفات من git checkout.

الصيغة

git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (2)

استعادة منطقة التجهيز: إلغاء تجهيز الملف. ملف العمل لا يُمسّ.

موصى بهالطريقة الآمنة لإلغاء التجهيز: تعديلاتك تبقى على القرص

مثال

git restore --staged app.js

استعادة مجلد العمل (الافتراضي). مع --staged يُستعاد الاثنان.

عند الحاجةالهدف الافتراضي؛ اجمعه مع --staged لإعادة ضبط الاثنين

مثال

git restore --staged --worktree app.js

متوسط (2)

أخذ الملف من الـ commit أو الفرع أو الوسم المحدّد بدل منطقة التجهيز.

موصى بهاسترجاع ملف من أي commit دون تحريك الفرع

مثال

git restore --source=HEAD~1 app.js

اختيار المقاطع (hunks) تفاعليًا: يسألك git عن كل تغيير.

عند الحاجةالتخلّص من مقاطع مختارة والإبقاء على الباقي

مثال

git restore -p app.js

اختيار الخيار المناسب

restore مقابل الأوامر القديمة

الإجراءات نفسها، قديمًا وحديثًا

الأمرالمكافئ القديمالأثر
git restore app.jsgit checkout -- app.jsالتخلّص من التعديلات غير المجهَّزة
git restore --staged app.jsgit reset app.jsإلغاء التجهيز مع الإبقاء على التعديلات
git restore --source=HEAD~1 app.jsgit 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‏َين.

أمثلة على سير العمل

1
git add .

كل شيء مجهَّز

2
git restore --staged README.md

أُلغي تجهيز README.md

3
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.

الأسئلة الشائعة

A:

يغيّر git restore الملفات. أما git reset فينقل الفرع إلى commit آخر (ويمكنه إعادة تعيين الملفات أيضًا).

A:

ليس للتعديلات المُتخلَّص منها: Git لم يخزّنها قط. أما إلغاء التجهيز بـ --staged فلا يُضيّع شيئًا.

A:

Git 2.23 أو أحدث. في الإصدارات الأقدم استخدم git checkout -- <file> وgit reset <file>.