إذا اختفى ملف من مشروعك على جهاز Mac قبل أن تقوم بتثبيته (Commit)، فتحقق أولاً من سلة المهملات على Mac وأي نسخ احتياطية في Time Machine أو السحابة. ثم تحقق من Git: يمكنه استعادة الملف المحذوف إذا كان إصداره موجوداً في الفهرس (Index) أو في تثبيت (Commit)، وقد يكشف عن محتوى محفوظ ككائن لا يمكن الوصول إليه (Unreachable Object). وإذا كان الملف موجوداً فقط كمحتوى غير محفوظ أو غير مجهز (Unstaged) في نسخة العمل، فقد لا يملك Git أي نسخة منه. اتبع خطوات التحقق هذه قبل إنشاء ملفات جديدة في المشروع.
1. تحقق من سلة المهملات وابحث في جهاز Mac
افتح سلة المهملات من شريط Dock وابحث عن الملف باسمه. إذا وجدته، فانقر عليه مع الضغط على مفتاح Control واختر إرجاع (Put Back) لإعادته إلى موقعه الأصلي، أو اسحبه إلى مكان آمن. توصي Apple أيضاً بالبحث باستخدام Spotlight إذا كان الملف قد نُقل أو غُيّر اسمه. بالنسبة لمجلد مشروع موجود على iCloud Drive، تحقق من سلة المهملات وخيارات "المحذوفة مؤخراً" أو استعادة البيانات في iCloud أيضاً؛ حيث تفيد Apple بأنه يمكن عموماً استعادة ملفات iCloud Drive المحذوفة المؤهلة في غضون 30 يوماً. تعليمات الاسترداد من iCloud من Apple
إذا كانت إحدى أدوات المطورين قد حذفت الملف مباشرةً، أو تم إفراغ سلة المهملات، فانتقل إلى الخطوة التالية. لا تفترض أن كل عملية حذف تمر عبر سلة المهملات.
2. ابحث في Time Machine، بما في ذلك اللقطات المحلية (Local Snapshots)
إذا كان Time Machine مُمكّناً، فقم بتوصيل قرص النسخ الاحتياطي إن وجد. في Finder، افتح المجلد الذي كان يحتوي على الملف، واستخدم Spotlight لفتح Time Machine، ثم تصفح الخط الزمني أو أسهم النسخ الاحتياطي للوصول إلى تاريخ يسبق الحذف. حدد الملف وانقر على استعادة (Restore). تفيد Apple بأن العناصر المستعادة تعود إلى موقعها الأصلي، لذا فكّر في استعادتها إلى موقع منفصل إذا كنت ترغب في مقارنة الإصدارات قبل استبدال أي شيء. دليل Apple لاستعادة عناصر Time Machine
عدم اتصال قرص النسخ الاحتياطي لا يعني بالضرورة استبعاد إمكانية الاسترداد. يمكن لـ Time Machine استخدام لقطات محلية مخزنة على جهاز Mac، ولكنها مؤقتة: تذكر Apple أن اللقطات تُحفظ عادةً كل ساعة ويُحتفظ بها لمدة 24 ساعة، مع مراعاة توفر المساحة لأي لقطات إضافية. وهي لا توجد إلا عندما يكون Time Machine قيد الاستخدام، ولا تُعد بديلاً عن النسخ الاحتياطي الخارجي. حول اللقطات المحلية لـ Time Machine
3. استعادة ملف مُتتبع من Git
افتح Terminal، وانتقل إلى مجلد المشروع، وتحقق من حالة الملف قبل استعادة أي شيء:
git status --short
إذا ظهر المسار المحذوف وكان الملف مُتتبعاً، فاستعده من الفهرس باستخدام مساره النسبي في المشروع:
git restore -- path/to/file.ext
يؤدي هذا إلى نسخ الإصدار المفهرس إلى شجرة العمل (Working Tree). إذا لم يكن الفهرس يحتوي على الملف، ولكنه موجود في آخر تثبيت (Commit)، فاستعده من HEAD بدلاً من ذلك:
git restore --source=HEAD -- path/to/file.ext
هذا الاختلاف مهم: يعتمد git restore افتراضياً على الفهرس لاستعادة شجرة العمل؛ بينما يحدد --source=HEAD آخر تثبيت بشكل صريح. تؤدي الاستعادة إلى الكتابة فوق المسار المحدد في شجرة العمل بالإصدار المختار، لذا قم أولاً بعمل نسخة احتياطية لأي ملف موجود هناك تهمك محتوياته. يوضح Git مصادر الاستعادة هذه وسلوكها في دليل git restore.
لا يمكن لهذه الأوامر استعادة ملف جديد تماماً غير مُتتبع (Untracked) أو تعديلات لم يتم تجهيزها (Staged) أو تثبيتها (Committed) قط. لا يعرف Git إلا الإصدارات التي دخلت في فهرسه أو تثبيتاته أو قاعدة بيانات كائناته.
4. البحث في كائنات Git التي لا يمكن الوصول إليها كحل أخير
في بعض الأحيان، يقوم Git بتخزين محتوى الملف حتى لو لم يكن هناك فرع (Branch) أو تثبيت يشير إليه — على سبيل المثال، إصدار تم تجهيزه (Staged) ثم إزالته من الفهرس. من مجلد المشروع، افحص الكائنات التي لا يمكن الوصول إليها:
git fsck --unreachable
قد يبلغ Git عن كائن blob لا يمكن الوصول إليه متبوعاً بمعرّف الكائن (Object ID). لمعاينة مرشح دون تغيير المشروع، استخدم:
git cat-file -p OBJECT_ID
استبدل OBJECT_ID بالمعرّف المذكور. إذا كان الناتج هو الملف المفقود، فقم بإعادة توجيهه إلى نسخة مستردة خارج المشروع، على سبيل المثال:
git cat-file -p OBJECT_ID > "$HOME/Desktop/recovered-file.txt"
اسم الملف وامتداده هنا هما مجرد أمثلة؛ اختر وجهة واسماً يناسبان الملف. تُخزّن كائنات Git blobs المحتوى فقط وليس المسار الأصلي، لذا قد تحتاج إلى فحص المرشحين وتحديد الاسم الصحيح بنفسك. يبلغ git fsck عن الكائنات التي لا يمكن الوصول إليها، ويمكن لخياره --lost-found كتابة محتوى الـ blob تحت المسار .git/lost-found/other/؛ ولا تضمن أي من الطريقتين وجود إصدار قابل للاسترداد. توثيق git fsck من Git
عندما لا يتوفر الملف في أي من مصادر الاسترداد
إذا كانت سلة المهملات والنسخ الاحتياطية والاسترداد السحابي وفهرس Git والتثبيتات وكائنات Git التي يتعذر الوصول إليها لا تحتوي عليه، فقد لا تكون هناك نسخة متاحة من خلال هذه الأدوات الموثقة. وبوجه خاص، فإن الملف غير المُتتبع الذي لم يتم تجهيزه مطلقاً يقع خارج سجل Git المحفوظ. تحقق من السجل المحلي الخاص بمحرر الأكواد لديك أو من خدمة نسخ احتياطي أخرى إن كنت قد استخدمت إحداها؛ ويعتمد التوفر وخطوات الاسترداد على هذا المنتج. حافظ على المشروع كما هو أثناء البحث، واحفظ أي محتوى مسترد باسم جديد حتى تتأكد من أنه الإصدار الذي تحتاجه.
المصادر
- إذا فقدت ملفات في iCloud Drive — دعم Apple
- استعادة العناصر التي تم نسخها احتياطياً باستخدام Time Machine على Mac — دعم Apple
- حول اللقطات المحلية لـ Time Machine — دعم Apple
- git restore — Git
- git fsck — Git