تخطَّ إلى المحتوى
GitTree

الدرس 29 · الاستعادة

العثور على إيداع ضائع بسجل المراجع (reflog)

اعثر على إيداع تركته إعادة تعيين كاملة في سجل المراجع المحلي، وافحص ملفه قبل أن تثق به، وضع عليه فرعًا دون أن تحرّك نسختك الحالية.

حُفظ التقدّم في هذا المتصفح.

يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).

تعليق صوتي بالإنجليزية · ترجمة إنجليزية وعربية

افتح صفحة الفيديوشاهد على YouTube

ما ستتعلمه

  • أن تقرأ سجل المراجع بوصفه سجل هذا المستودع لأماكن HEAD والفروع.
  • أن تفحص محتوى إيداع مرشَّح قبل استعادته.
  • أن تنشئ فرعًا عند الإيداع الذي قِسته دون التبديل إليه.
  • أن تقول ما لا يعيده سجل المراجع: العمل غير المودَع والقيود المنتهية.

قبل البدء

أنت على private/lost-signup، وهو فرع من ناتج الدرس 18 (M). أودعت ملاحظة، «docs: keep the signup recovery note»، أضافت docs/signup-recovery.md، ثم نفّذت إعادة تعيين كاملة إيداعًا واحدًا إلى الخلف. اختفت الملاحظة من الفرع ومن المخطط ومن ملفاتك. ليس لديك فرع حفظ بعد، ولم تغيّر شيئًا آخر.

كل شيء هنا محلي وضمن الخطة المجانية (يطلب GitTree تسجيل الدخول): دون حساب استضافة أو مزوّد أو إنترنت. كل الهويات خيالية (example.com). لا تنفّذ الدرس في مشروع حقيقي. إعادة التعيين الكاملة في الإعداد بروفة في نسخة مؤقتة.

نفّذ التغييرات في GitTree أو بأوامر Git الأصلية، لا بالطريقتين في النسخة نفسها. القراءة بعد التنفيذ آمنة دائمًا. تسميات القوائم مأخوذة من نصوص GitTree 2.0 نفسها، وشُغّلت الأوامر الأصلية بـ Git 2.43 في نسخ مؤقتة. لم تُشغَّل خطوات GitTree على macOS أو Windows أو Linux.

الفكرة وأثر الأفعال

سجل المراجع (reflog) مفكرة محلية لحركة المراجع. للـ HEAD سجل، ولكل فرع سجله. يسجّل «commit» و«checkout» و«reset» ونحوها مع الإيداع الذي انتهى إليه كل منها. لا يملك مستودع آخر مفكرتك. وقد يظل إيداع لا يسمّيه أي فرع موجودًا، وسجل المراجع هو طريقك إليه.

تعدّ المحدِّدات مثل HEAD@{1} القيود إلى الخلف من الآن، فتتغير مع كل عملية لاحقة. اقرأ الفعل والوقت والمعرّف والملف لأي مرشَّح قبل أن تستخدمه. ولا تحفظ رقمًا كوصفة.

يجد سجل المراجع الإيداعات المحفوظة. ولا يجد تعديلًا لم يُودَع قط، كما رأيت في الدرس 27. والقيود تنتهي: افتراضيًا يحتفظ Git بقيود الإيداعات التي لا يصل إليها فرع نحو ثلاثين يومًا، ويمكن لمستودع أن يغيّر ذلك. لا تشغّل أوامر تنظيف أو إنهاء أثناء الاستعادة.

إنشاء فرع عند الإيداع يضيف مرجعًا واحدًا لا غير. يبقى الفرع الحالي والفهرس وملفاتك حيث هي.

إعداد حالة المشروع المحددة

ابدأ من نسخة عادية منفصلة من ناتج الدرس 18 (M) وأبقِ أصلك دون مساس. أنشئ الفرع واحفظ DOC_LOST وأودِعه ثم نفّذ إعادة تعيين كاملة إيداعًا واحدًا إلى الخلف. هذا الإعداد المدمّر لنسخة مؤقتة فقط.

مدخلات الملفات كاملة

احفظ في المرحلة المحددة فقط بصيغة UTF-8 وLF وسطر نهائي. لا تلصق أسوار Markdown. ترث الملفات الثابتة نقطة البداية؛ لا تستبدل الأصل بنسخة إعادة منفصلة.

docs/signup-recovery.md — DOC_LOST

الناتج
# Recovered signup work

Keep a branch name before leaving useful experimental work.

في GitTree

افتح لوحة الأوامر بـ Command+Shift+P (وCtrl+Shift+P على Ubuntu).

  1. ابنِ البروفة كما يبيّن القسم التالي ودوّن عنوان الإيداع الضائع.
  2. افتح لوحة الأوامر ونفّذ عرض سجل المراجع (reflog)… (View Reflog…). يفتح حوار «سجل المراجع (reflog)» وسجل المراجع لـ (Reflog of) على HEAD؛ والقيود الأحدث أولًا.
  3. اقرأ القيود العليا. الأحدث يقول «reset» والذي تحته يقول «commit» بالعنوان «docs: keep the signup recovery note». استخدم عرض القيود الأقدم (Show Older Entries) إن طالت القائمة. ولا تفترض أن الصف الثاني هو الصحيح دائمًا.
  4. حدّد قيد الإيداع. يعرض الحوار إظهار في المخطط (Show in Graph) واسم الفرع الجديد (New branch name). يستطيع إظهار في المخطط وضع إيداع يصل إليه فرع فقط، لذا يغلق الحوار لهذا الإيداع الضائع ويبقى المخطط على M: أعد فتح سجل المراجع للخطوة التالية. تقرأ ملف الإيداع بعد استعادته.
  5. عد إلى الحوار وحدّد القيد نفسه، واكتب rescue/signup في اسم الفرع الجديد واختر استعادة كفرع (Restore as Branch). يقول الإشعار «تم إنشاء الفرع rescue/signup. يزيله التراجع مجددًا.»
  6. افحص النتيجة: rescue/signup يشير إلى الإيداع الضائع، والفرع الحالي ما زال private/lost-signup على M، وملفاتك لم تتغير. حدّد الإيداع المستعاد وافتح ملفه docs/signup-recovery.md: هو DOC_LOST.
  7. أبقِ فرع الحفظ مكانه. ولا تشغّل أي تنظيف لترتيب المخطط.

لكل إيداع عادي في الدورة: الملخّص (Summary) هو العنوان المحدد، والوصف (Description) خالٍ، وتبقى الخيارات تعديل الإيداع الأخير وتخطّي الخطّافات وإضافة Signed-off-by ومؤلف مختلف والدفع بعد الإيداع والسماح بإيداع فارغ معطّلة.

في الطرفية

في نسخة منفصلة ونظيفة فقط من ناتج الدرس 18:

الأمر · bash
git switch --create private/lost-signup

احفظ DOC_LOST باسم docs/signup-recovery.md ثم:

الأمر · bash
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: keep the signup recovery note"
git reset --hard HEAD~1
git reflog show --format=%gs -2 HEAD
الناتج
reset: moving to HEAD~1
commit: docs: keep the signup recovery note

اسرد المرشَّحين مع معرّفاتهم وافحص الذي تظنه الضائع:

الأمر · bash
git reflog show --format='%H %gs' HEAD
git show "<lost-sha>:docs/signup-recovery.md"

استبدل <lost-sha> بالمعرّف في السطر «commit: docs: keep the signup recovery note». في هذا المثال الفوري يكون HEAD@{1} هو الإيداع نفسه، لكن ذلك الرقم ليس قاعدة. أنشئ فرع الحفظ دون التبديل إليه:

الأمر · bash
git branch rescue/signup "<lost-sha>"
git show rescue/signup:docs/signup-recovery.md
git symbolic-ref --short HEAD
git status --short

الملف هو DOC_LOST، والفرع المطبوع هو private/lost-signup، والحالة خالية. لا تُظهر ملفاتك الملاحظة لأن HEAD بقي على M. ولا أمر إنهاء أو تنظيف ضمن هذا الدرس.

النتيجة

أين تنتهي: rescue/signup يشير إلى الإيداع الضائع وملفه هو DOC_LOST. الفرع الحالي والفهرس وملفاتك كما كانت بعد إعادة التعيين تمامًا، ولم يُدفع شيء.

أخطاء شائعة

  • استخدام HEAD@{1} وصفةً ثابتة بدل قراءة القيد.
  • إعادة التعيين أو التبديل مرة أخرى قبل حفظ فرع، فتُضاف قيود أكثر وتُدفن التي تريدها.
  • توقع أن يحمل سجل المراجع تعديلًا لم يُودَع قط.
  • تشغيل أوامر تنظيف أثناء البحث.

إن حدث خطأ

إن لم يكن الإيداع في القائمة فربما تنظر إلى مرجع خاطئ: بدّل سجل المراجع لـ بين HEAD والفرع، واستخدم عرض القيود الأقدم. وإن كان ضائعًا حقًا فقد انتهى أو لم يُودَع أصلًا. وفي التطبيق يقول الإشعار بعد استعادة كفرع إن التراجع يزيل الفرع مجددًا.

اختبر فهمك

أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.

  1. السؤال 1 من 6

    ما هو سجل المراجع؟

    اختر إجابة واحدة.

  2. السؤال 2 من 6

    أي مما يلي صحيح عن سجل المراجع؟

    اختر كل إجابة صحيحة.

  3. السؤال 3 من 6
    مطلوب

    وجدت الإيداع الضائع في سجل المراجع واستخدمت استعادة كفرع باسم rescue/signup. ماذا ترى؟

    اختر إجابة واحدة.

  4. السؤال 4 من 6

    غيّر المُدخل: لم تودع الملاحظة قط ثم نفّذت الإعادة الكاملة. هل يعيدها سجل المراجع؟

    اختر إجابة واحدة.

  5. السؤال 5 من 6
    مطلوب

    نفّذت عمليات أخرى ثم شغّلت git branch rescue HEAD@{1}، والملف ليس الذي تريده. ماذا حدث؟

    اختر إجابة واحدة.

  6. السؤال 6 من 6
    مطلوب

    بعد إنشاء فرع الحفظ، أي قراءات تبيّن أنه عمل كما يقول الدرس؟

    اختر كل إجابة صحيحة.

0 من 6 صحيحة

أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.

جرى التحقق في هذا المتصفح.

تدريب

اذكر أحدث سطري سجل المراجع، ومعرّف الإيداع الضائع، وأول سطر من الملف المستعاد، والفرع الذي عليه نسختك الحالية. ثم قل ماذا يعرض سجل المراجع لتعديل لم تودعه قط.

تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.

لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.

خلاصة

  • سجل المراجع مفكرة محلية لحركة المراجع.
  • افحص المرشَّح ثم أنشئ منه فرعًا.
  • يجد الإيداعات لا التعديلات غير المحفوظة.

المصطلحات الجديدة

Reflog — سجل المراجع; rescue branch — فرع حفظ; selector — محدِّد.

نص الفيديو

ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.

اعرض النص
  1. يبدو الإيداع ضائعًا. لكن Git ما زال يذكر أين كان.
  2. سجل المراجع مفكرة محلية لأماكن HEAD والفروع.
  3. قد يظل إيداع لا يسمّيه فرع مذكورًا فيه.
  4. في نسخة مؤقتة: أودِع ملاحظة ثم أزلها بإعادة تعيين كاملة.
  5. يعرض المخطط M وحده. والملاحظة لا أثر لها.
  6. لا تعيّن ولا تنظّف الآن. انظر أولًا.
  7. افتح لوحة الأوامر ونفّذ عرض سجل المراجع.
  8. يفتح الحوار على HEAD. أحدث حركة أولًا.
  9. الصف الأحدث هو إعادة التعيين. وتحته الإيداع الضائع.
  10. إن طالت القائمة فاعرض القيود الأقدم.
  11. يمكنك التبديل بين HEAD والفرع.
  12. لا تحفظ HEAD@{1}. اقرأ القيد بدلًا من ذلك.
  13. حدّد قيد الإيداع. تظهر خيارات جديدة.
  14. لا يستطيع «إظهار في المخطط» وضعه: لا فرع يصل إلى هذا الإيداع.
  15. لذلك نستعيده فرعًا أولًا، ثم نقرأ ملفه.
  16. عد وحدّد القيد نفسه.
  17. سمِّ الفرع rescue/signup.
  18. استعده فرعًا. يقول الإشعار إن التراجع يزيله مجددًا.
  19. فرع الحفظ على الإيداع الضائع. وما زلت على M.
  20. ملفاتك لم تتغير.
  21. في الطرفية السطران الأحدث هما إعادة التعيين والإيداع.
  22. مع المعرّفات نختار الإيداع من سطره.
  23. يقرأ git show مع مسار الملف من ذلك الإيداع.
  24. ينشئ git branch فرع الحفظ. ونسختنا لا تتحرك.
  25. الحالة خالية، والملف آمن على الفرع.
  26. التعديل الذي لم يُودَع ليس في سجل المراجع.
  27. القيود تنتهي. لا تشغّل تنظيفًا أثناء الاستعادة.
  28. هو محلي. لا تملك النسخ الأخرى مفكرتك.
  29. تدريب: اذكر السطرين والمعرّف وأول سطر والفرع.
  30. التالي: التراجع والإعادة في GitTree نفسه.