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

🔀 شرح Git

سجلّ المراجع والخلاص الأخير (Reflog)

الدرس 29 من 32· ⏱ 2 دقائق قراءة

المشكلة

عملت git reset --hard بالخطأ ومسحت آخر 3 commits؟ حذفت فرعًا وفيه شغل لم تدمجه؟ في أغلب الأدوات هذا يعني ضياع العمل نهائيًا — لكن Git يحتفظ بسجلّ منفصل لكل تحرّك يحدث لمؤشّر HEAD والفروع، حتى لو لم يعد أي commit أو فرع يشير إليها.

ما هو reflog؟

Reflog (Reference Log) سجلّ محلّي — موجود فقط في .git/logs/ على جهازك، لا يُرفع ولا يُشارك — يسجّل كل مرّة تحرّك فيها HEAD: commit جديد، checkout، merge، rebase، reset، حتى حذف فرع.

git reflog
a3f5c21 (HEAD -> main) HEAD@{0}: commit: إصلاح صفحة الدفع
9be1d02 HEAD@{1}: reset: moving to HEAD~2
7c44a0e HEAD@{2}: commit: تجربة تصميم جديد
1d0aa9f HEAD@{3}: checkout: moving from feature to main

كل سطر له عنوان خاص به بصيغة HEAD@{n} — رقم خطوات للخلف من الوضع الحالي، وليس رقم commit عادي.

استرجاع commit "ضائع"

بعد git reset --hard HEAD~2 بالخطأ، الـ commits القديمة لا تزال موجودة في قاعدة بيانات Git، فقط لم يعد أي مرجع يشير إليها:

git reflog                    # ابحث عن الـ commit قبل الـ reset
git reset --hard HEAD@{1}     # ارجع إليه — يُلغي الـ reset

أو إن كنت تريد استرجاع commit واحد فقط دون إلغاء كل شيء بعده:

git cherry-pick a3f5c21

استرجاع فرع محذوف

git branch -D feature-login          # حُذف بالخطأ
git reflog                           # ابحث عن آخر commit كان عليه الفرع
git checkout -b feature-login a3f5c21  # أنشئ الفرع من جديد بنفس النقطة

طالما آخر commit للفرع المحذوف ظهر في git reflog (غالبًا كسطر checkout أو commit سابق)، يمكن استرجاعه بالكامل.

مدّة الاحتفاظ

Git لا يحتفظ بسجلّ reflog للأبد — الإدخالات القابلة للوصول تُحذف تلقائيًا بعد 90 يومًا، وغير القابلة للوصول (مثل commits حُذفت فعليًا) بعد 30 يومًا، عبر git gc. لهذا الاسترجاع يعمل غالبًا خلال أيام أو أسابيع من الخطأ، لا بعد أشهر.

💡 git reflog سجلّ محلّي فقط — لا يساعدك على استرجاع شيء لم يكن موجودًا أصلًا على جهازك (مثل commit لزميل لم تسحبه بعد).

⚠️ إن كنت تعرف مسبقًا أن commit موجود عندك لكنه اختفى، لا داعي للذعر — جرّب git reflog قبل أي شيء آخر.

🎯 التالي: إعادة الأساس التفاعلية (Interactive Rebase).

شرح سجلّ المراجع والخلاص الأخير (Reflog) — Git بالعربي
سجلّ المراجع والخلاص الأخير (Reflog)Git بالعربي · The Code Fix

📚 لمزيد من التعمّق في Git، راجِع التوثيق الرسمي لـ Git.

هل كان هذا الدرس مفيدًا؟