git log

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

عرض سجلات الـ commits


يعرض الأمر 'git log' تاريخ commits مستودعك. يعرضها بترتيب زمني معكوس (الأحدث أولًا)، مع الـ hash والمؤلف والتاريخ والرسالة. وبخياراته المختلفة يمكنك تخصيص تنسيق المخرجات وتصفية الـ commits وتتبّع تاريخ ملف. أساسي لفهم تاريخ المشروع وإيجاد تغييرات محددة.

الصيغة

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

الخيارات

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

مبتدئ (4)

اختصار لـ ‎--pretty=oneline --abbrev-commit. يعرض كل commit في سطر واحد مع hash مختصر.

موصى بهتاريخ مختصر بسطر واحد — أفضل نظرة عامة يومية

مثال

git log --oneline

ارسم تمثيلًا بيانيًا نصيًا لتاريخ الـ commits. يُظهر بنية الفروع والدمج بصريًا.

موصى بهيُظهر أين تتفرّع الفروع وتُدمج؛ اجمعه مع ‎--oneline

مثال

git log --oneline --graph

اعرض الـ commits التي يمكن الوصول إليها من كل المراجع - كل فرع محلي وفرع تتبّع بعيد ووسم (إضافةً إلى الـ stash) - لا من HEAD فقط. أساسي مع ‎--graph.

موصى بهمع ‎--graph، يعرض كل فرع ووسم ومرجع تتبّع بعيد

مثال

git log --oneline --all

احصر عدد الـ commits المعروضة. يعرض -n 5 أحدث 5 commits فقط؛ و-5 و‎--max-count=5 صيغتان مكافئتان.

موصى بهيحصر المخرجات في أحدث N من الـ commits

مثال

git log -n 5

متوسط (2)

اعرض الـ diff (patch) الذي أدخله كل commit. ترى بالضبط ما تغيّر في كل commit. لا تعرض commits الدمج diff افتراضيًا.

عند الحاجةالـ diffs الكاملة طويلة؛ اجمعه مع -n أو مسار. ولا تُظهر عمليات الدمج diff افتراضيًا

مثال

git log -p

صفِّ الـ commits التي يطابق اسم مؤلفها أو بريده النمط (تعبير نمطي يميّز حالة الأحرف؛ أضف -i لتجاهلها). مفيد لرؤية ما كتبه شخص محدد.

عند الحاجةيصفّي حسب المؤلف: تعبير نمطي يميّز حالة الأحرف؛ أضف -i لتجاهلها

مثال

git log --author="John"

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

تنسيقات مخرجات log

اختر التنسيق المناسب لحاجتك

الأمريعرضمستوى التفصيلالأنسب لـ
git logكل التفاصيلمرتفعمراجعة مفصّلة
git log --onelineHash + رسالةمنخفضنظرة عامة سريعة
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 الخاصة بها.

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

1
git log --oneline -10

نظرة سريعة على آخر 10 commits

2
git log -p -1

عرض الـ diff الكامل لأحدث commit

1
git log --oneline -- path/to/file.js

اسرد الـ commits التي غيّرت هذا الملف

2
git log -p -- path/to/file.js

اعرض التغييرات الفعلية

3
git blame path/to/file.js

اعرف من كتب كل سطر

1
git log --oneline --graph --all

تصوّر كامل للفروع

2
git log --oneline --graph main..feature

commits في 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.
  • ✗عدم وضع -- قبل مسارات الملفات، مما قد يسبب لبسًا مع أسماء الفروع.

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

A:

اضغط 'q' للخروج. يستخدم git log العارض 'less'. ويمكنك أيضًا حصر المخرجات بـ -n أو تمريرها إلى head.

A:

استخدم ‎--all: ‏git log --oneline --all. دونه ترى فقط الـ commits التي يمكن الوصول إليها من فرعك الحالي (HEAD).

A:

استخدم -p (patch): ‏git log -p. أضف -1 لرؤية الأحدث فقط: git log -p -1

A:

استخدم ‎--author: ‏git log --author="name". يطابق أجزاء من الأسماء والبريد (يميّز حالة الأحرف؛ أضف -i لتجاهلها).

A:

يعرض log تاريخ الـ commits. ويعرض reflog كل تحركات HEAD بما فيها عمليات reset. استخدم reflog لاستعادة الـ commits «الضائعة».