git reflog

الفحص والمقارنة

عرض الأماكن التي مرّ بها HEAD والفروع


يسرد الأمر 'git reflog' كل موضع كان فيه HEAD: كل commit وتبديل وreset ودمج وrebase، الأحدث أولًا. وهو محلي في مستودعك وشبكة الأمان للعمل المفقود — الـ commits التي أزالها reset أو rebase من فرع ما زالت مُدرجة ويمكن استرجاعها بـ HEAD@{n}. تنتهي صلاحية المُدخلات بعد 90 يومًا افتراضيًا.

الصيغة

git reflog [show] [<log-options>] [<ref>]
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (1)

حصر القائمة في أحدث n مُدخلات (تُكتب أيضًا -<n>).

موصى بهأحدث المُدخلات هي عادة ما تحتاجه

مثال

git reflog -n 5

اختيار الخيار المناسب

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 فقط.

أمثلة على سير العمل

1
git reflog

العثور على المُدخل السابق للـ reset

2
git reset --hard HEAD@{1}

العودة إليه

1
git reflog

العثور على آخر commit في ذلك الفرع

2
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 على جهاز آخر — لا يُدفع ولا يُستنسخ أبدًا.

الأسئلة الشائعة

A:

افتراضيًا 90 يومًا للمُدخلات القابلة للوصول و30 يومًا لغير القابلة.

A:

لا، يسرد فقط. الأمران git reflog expire وdelete هما من يزيلان المُدخلات.