استعادة فرع Git محذوف
تمثل المقاطع حالات مختلفة وليست سكربتاً واحداً. اختر الحالة المناسبة لمستودعك واستبدل أسماء الفروع والمسارات وVERIFIED_COMMIT قبل الاستخدام. أوامر الإلغاء تخص العملية النشطة المقابلة فقط؛ لا تنفذ البديلين معاً.
الجواب المختصر
حذف الفرع يزيل مرجعه، ولا يحذف بالضرورة commits. اعثر على آخر commit محفوظ وأنشئ فرعًا يمنحه اسمًا.
المثال وشروطه
تحتاج إلى commit الصحيح وكائناته المتاحة. قد تعرض رسالة الحذف SHA؛ احفظه وافحصه قبل إجراء التغيير.
افحص الحالة قبل التعديل
اقرأ reflog الخاص بـHEAD وسجل المرشح. يُحذف reflog الفرع معه، لكن سجل HEAD قد يحتفظ بتحركات مفيدة.
git reflog --date=iso
git show VERIFIED_COMMIT
git log -5 --oneline VERIFIED_COMMITاحتفظ بمرجع أو نسخة عمل منفصلة
استخدم git branch rescue/deleted-branch VERIFIED_COMMIT لتسمية commit دون تبديل الفرع. لا حاجة إلى الكتابة فوق مجلد العمل.
git branch rescue/deleted-branch VERIFIED_COMMITالمسار الأول
تحقق باستخدام git show وgit log من الطرف والسجل المطلوبين. ثم أعد إنشاء الاسم الأصلي إذا لم يكن مستخدمًا.
اختر النتيجة الأخرى عن قصد
إذا كان هناك فرع بعيد، تحقق من استمرار مرجعه قبل fetch وإعادة إنشاء الفرع المحلي. رفعه في الماضي لا يضمن بقاءه الآن.
الحدود والاستثناءات
لا يحتوي clone جديد على reflog المحلي الخاص بك. انتهاء السجل وتنظيف الكائنات سياستان منفصلتان؛ تجنب التنظيف القسري أثناء الاستعادة.
git ls-remote --heads origin my-branchالتعارضات والتنظيف
عند غياب المرجع، قد يعثر git fsck --full --no-reflogs --unreachable على commits محفوظة. افحص المرشحين؛ لا يعرف الأمر أي فرع تقصده.
git fsck --full --no-reflogs --unreachableتحقق من النتيجة
تحقق من سجل الفرع المعاد إنشاؤه وحالته. استعادة commits لا تعيد تعديلات ملفات لم تُسجل قط في commit.
git log -5 --oneline rescue/deleted-branch
git status --shortأسئلة شائعة
الاسم المفقود ليس نسخة احتياطية. إذا غاب الكائن، ابحث عن نسخة أخرى أو متعاون أو مرجع بعيد موجود فعلًا.
راجع العملية في FluxGit
يمكن لـFluxGit حماية حذف الفرع داخل التطبيق. يسجل Ref journal المفعّل تغيرات المراجع عندما يعمل hook المثبت؛ تجاوز hook وتطبيقات Git الأخرى خارج هذه التغطية.
مراجع Git الرسمية
استعادة فرع Git محذوف باستخدام reflog
استعد فرعًا محليًا حُذف مؤخرًا بالعثور على الكوميت المحفوظ وإنشاء فرع جديد. شاهد reflog وSafety Timeline في FluxGit داخل مستودع اختبار، وتعرّف على الحالات التي يستطيع فيها خطاف Ref journal المثبّت تسجيل تغييرات المراجع عبر سطر أوامر Git.
شاهد على YouTube — يفتح علامة تبويب جديدة
سُجّل في مستودع اختبار. التعليق الصوتي بالإنجليزية والترجمة بالعربية. تتطلب الاستعادة بقاء كائنات الكوميت وتوافر سجلات reflog أو الدفتر؛ لا ينسخ Ref journal الملفات غير المحفوظة في كوميت احتياطيًا.
اقرأ نص التعليق الصوتي
- حذفت فرعًا يحتوي على عمل باستخدام git branch -D، وفيه التزامان لم يُدمجا في أي مكان. إليك طريقة استعادتهما.
- في FluxGit، اختفى الفرع من القائمة.
- إليك سبب عدم ضياع العمل. الفرع تسمية. يزيل git branch -D التسمية، لكن الالتزامين يبقيان في المستودع دون فرع يشير إليهما. ما زال reflog يتذكرهما. أنشئ فرعًا عند الالتزام الأخير، وسيعود الاثنان.
- افتح Safety Timeline. يعرض reflog بجمل بسيطة.
- في Find a lost commit، اكتب جزءًا من الرسالة. نتيجة واحدة: الالتزام الأخير للفرع المحذوف.
- Create branch here. يشير فرع الاستعادة إلى ذلك الالتزام، ولا يتحرك شيء آخر.
- عاد الالتزامان إلى الرسم البياني.
- فعّل Ref journal لهذا المستودع.
- عندما يعمل خطاف Git المثبّت، يستطيع FluxGit تسجيل حذف الفروع عبر سطر أوامر Git، بما في ذلك أوامر الطرفية أو الوكلاء.
- لا يشمل ذلك تجاوز الخطاف أو استخدام تطبيقات أخرى لـGit.
- يسجّل المراجع، لا الملفات غير المحفوظة في كوميت.
- وما زالت الاستعادة تتطلب وجود كائنات الكوميت.
- في الطرفية: استخدم git reflog للعثور على الالتزام، ثم git branch مع الاسم القديم وذلك الالتزام.
- خلاصة. الفرع المحذوف تسمية مفقودة؛ وما زال reflog يجد الالتزامات. الدرس التالي: عندما يحذف وكيل ذكاء اصطناعي شفرتك.