git reflog
عرض الأماكن التي مرّ بها HEAD والفروع
يسرد الأمر 'git reflog' كل موضع كان فيه HEAD: كل commit وتبديل وreset ودمج وrebase، الأحدث أولًا. وهو محلي في مستودعك وشبكة الأمان للعمل المفقود — الـ commits التي أزالها reset أو rebase من فرع ما زالت مُدرجة ويمكن استرجاعها بـ HEAD@{n}. تنتهي صلاحية المُدخلات بعد 90 يومًا افتراضيًا.
الصيغة
git reflog [show] [<log-options>] [<ref>]الخيارات
اختيار الخيار المناسب
log مقابل reflog
تاريخان
| الأمر | يسرد | مشترك؟ |
|---|---|---|
git log | الـ commits التي يمكن الوصول إليها من فرع | نعم، مع الـ commits |
git reflog | كل تحرّك لـ HEAD، حتى إلى commits لا يملكها أي فرع | لا، محلي فقط |
أمثلة
سرد تحرّكات HEAD
git reflogالأحدث أولًا، مع الأسماء HEAD@{n}.
التراجع عن reset
git reset --hard HEAD@{1}العودة إلى حيث كان HEAD قبل تحرّك واحد.
reflog لفرع
git reflog show mainتحرّكات main فقط.
أمثلة على سير العمل
git reflogالعثور على المُدخل السابق للـ reset
git reset --hard HEAD@{1}العودة إليه
git reflogالعثور على آخر commit في ذلك الفرع
git switch -c feature/login a1b2c3dإعادة إنشاء الفرع هناك
حل المشكلات
الـ commit ليس في الـ reflog
السبب: لم يُستخرج هنا قط، أو انتهت صلاحية المُدخل
جرّب git fsck --lost-found للـ commits اليتيمة
HEAD@{1} يشير إلى مكان غير متوقَّع
السبب: كل تبديل فرع يُعدّ تحرّكًا أيضًا
اقرأ الـ reflog واختر المُدخل الصحيح
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓راجع git reflog قبل أن تذعر بسبب commits مفقودة.
- ✓استرجع أولًا على فرع جديد (git switch -c rescue <hash>) لتفحص بأمان.
أخطاء متكررة
- ✗الظن بأن reset --hard حذف الـ commits نهائيًا — ما زالت في الـ reflog.
- ✗الانتظار طويلًا: تختفي الـ commits غير القابلة للوصول حين تنتهي مُدخلات الـ reflog ويعمل git gc.
- ✗توقّع وجود الـ reflog على جهاز آخر — لا يُدفع ولا يُستنسخ أبدًا.
الأسئلة الشائعة
افتراضيًا 90 يومًا للمُدخلات القابلة للوصول و30 يومًا لغير القابلة.
لا، يسرد فقط. الأمران git reflog expire وdelete هما من يزيلان المُدخلات.