git log
عرض سجلات الـ commits
يعرض الأمر 'git log' تاريخ commits مستودعك. يعرضها بترتيب زمني معكوس (الأحدث أولًا)، مع الـ hash والمؤلف والتاريخ والرسالة. وبخياراته المختلفة يمكنك تخصيص تنسيق المخرجات وتصفية الـ commits وتتبّع تاريخ ملف. أساسي لفهم تاريخ المشروع وإيجاد تغييرات محددة.
الصيغة
git log [<options>] [<revision-range>] [[--] <path>...]الخيارات
اختيار الخيار المناسب
تنسيقات مخرجات log
اختر التنسيق المناسب لحاجتك
| الأمر | يعرض | مستوى التفصيل | الأنسب لـ |
|---|---|---|---|
git log | كل التفاصيل | مرتفع | مراجعة مفصّلة |
git log --oneline | Hash + رسالة | منخفض | نظرة عامة سريعة |
git log --stat | الملفات المتغيّرة لكل commit | متوسط | رؤية حجم التغييرات |
git log -p | الـ diff الكامل | عالٍ جدًا | مراجعة الشيفرة |
تصفية الـ commits
إيجاد commits محددة في التاريخ
| الأمر | التصفية حسب | مثال |
|---|---|---|
--author | الشخص الذي كتب الـ commit (المؤلف؛ استخدم --committer لمنفّذ الـ commit) | --author="John" |
--since/--until | نطاق زمني | --since="2024-01-01" |
--grep | رسالة الـ commit | --grep="fix" |
-- <path> | الملفات المتغيّرة | -- src/app.js |
Log مقابل Reflog
متى تستخدم كلًّا منهما
| الأمر | يعرض | يصمد أمام reset؟ | يُستخدم لـ |
|---|---|---|---|
git log | تاريخ الـ commits على الفرع | No | تصفّح التاريخ المعتاد |
git reflog | كل تحركات HEAD | نعم | استعادة commits ضائعة |
أمثلة
عرض الـ commits الحديثة
git logيعرض التاريخ الكامل مع الـ hash والمؤلف والتاريخ والرسالة.
عرض مختصر بسطر واحد
git log --onelineيعرض كل commit في سطر واحد مع hash مختصر ورسالة.
عرض تاريخ ملف
git log -- path/to/file.jsيعرض فقط الـ commits التي غيّرت الملف المحدد.
مخطط مرئي للفروع
git log --oneline --graph --allيعرض مخططًا نصيًا لكل الفروع والـ commits الخاصة بها.
أمثلة على سير العمل
git log --oneline -10نظرة سريعة على آخر 10 commits
git log -p -1عرض الـ diff الكامل لأحدث commit
git log --oneline -- path/to/file.jsاسرد الـ commits التي غيّرت هذا الملف
git log -p -- path/to/file.jsاعرض التغييرات الفعلية
git blame path/to/file.jsاعرف من كتب كل سطر
git log --oneline --graph --allتصوّر كامل للفروع
git log --oneline --graph main..featurecommits في feature ليست في main
حل المشكلات
مخرجات السجل طويلة جدًا / لا أستطيع الخروج
السبب: يستخدم Git العارض 'less' افتراضيًا
اضغط 'q' للخروج. استخدم -n لحصر الـ commits، أو مرّرها إلى head: git log --oneline | head -20
لا أرى commits الفروع الأخرى
السبب: يعرض git log افتراضيًا فقط الـ commits التي يمكن الوصول إليها من HEAD (فرعك الحالي)
استخدم --all: git log --oneline --all
لا أجد commit أعرف أنه موجود
السبب: قد يكون الـ commit على فرع آخر أو أُزيل بـ reset
جرّب git reflog لرؤية كل مواضع HEAD الأخيرة، حتى بعد عمليات reset
السجل يعرض معلومات كثيرة جدًا / قليلة جدًا
السبب: قد لا يناسب التنسيق الافتراضي حاجتك
استخدم --oneline للاختصار، و-p للتفصيل، و--stat لملخّص الملفات
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓استخدم --oneline لنظرة عامة سريعة، والسجل الكامل للمراجعة المفصّلة
- ✓اجمع --graph --all --oneline لتصوّر كامل للفروع
- ✓استخدم -n لحصر المخرجات حين تحتاج إلى الـ commits الحديثة فقط
- ✓صفِّ حسب المؤلف أو التاريخ أو المسار لإيجاد تغييرات محددة
- ✓استخدم git log main..feature لرؤية الـ commits الخاصة بفرع
أخطاء متكررة
- ✗عدم معرفة أنه يمكنك الضغط على 'q' للخروج من عارض السجل (يستخدم less افتراضيًا).
- ✗نسيان --all حين تريد رؤية commits كل الفروع، لا الحالي فقط.
- ✗استخدام git log حين تحتاج إلى git reflog - يعرض log تاريخ الـ commits، ويعرض reflog كل تغييرات المراجع بما فيها عمليات reset.
- ✗عدم وضع -- قبل مسارات الملفات، مما قد يسبب لبسًا مع أسماء الفروع.
الأسئلة الشائعة
اضغط 'q' للخروج. يستخدم git log العارض 'less'. ويمكنك أيضًا حصر المخرجات بـ -n أو تمريرها إلى head.
استخدم --all: git log --oneline --all. دونه ترى فقط الـ commits التي يمكن الوصول إليها من فرعك الحالي (HEAD).
استخدم -p (patch): git log -p. أضف -1 لرؤية الأحدث فقط: git log -p -1
استخدم --author: git log --author="name". يطابق أجزاء من الأسماء والبريد (يميّز حالة الأحرف؛ أضف -i لتجاهلها).
يعرض log تاريخ الـ commits. ويعرض reflog كل تحركات HEAD بما فيها عمليات reset. استخدم reflog لاستعادة الـ commits «الضائعة».