انتقل إلى محتوى الدرس
الدرس 12
دورة Version Control

البحث المتقدم وتخصيص مخرجات السجل في GitFiltering and Formatting Git Log

ابحث في سجل الالتزامات بالتاريخ أو المؤلف أو الكلمات المفتاحية أو مسار الملف أو السطر البرمجي (-S)، وخصص تقارير السجل عبر --pretty=format وgit shortlog.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

عندما يتسع سجل المشروع ليضم آلاف الالتزامات، يصبح التمرير اليدوي غير عملي؛ ولذلك يوفر الأمر git log فلاتر دقيقة لحصر النتائج حسب المؤلف أو النطاق الزمني:

  • التصفية حسب المؤلف (--author): يعرض الالتزامات التي يطابق فيها اسم المؤلف أو بريده الإلكتروني النص الممرر مثل --author="Tariq".
  • التصفية بالنطاق الزمني (--since و--until): يقبل التواريخ القياسية مثل "2026-10-01" أو العبارات الزمنية النسبية المرنة مثل "2 weeks ago" و"yesterday".
مخطط يوضح فلترة سجل Git حسب المؤلف والتاريخ والرسالة، وتتبع الملفات والبحث في الكود بالخيار -S، وتخصيص المخرجات وأمر git shortlog
Shell
# Show commits by a specific author
git log --author="Tariq" --oneline

# Show commits recorded in the last 7 days
git log --since="7 days ago" --until="today" --oneline

إذا كنت تتذكر كلمة مفتاحية أو رقم مهمة ورد في رسالة الالتزام مثل navbar أو fix، يمكنك استخدام الخيار --grep للبحث المباشر داخل نصوص رسائل الالتزامات عبر كامل تاريخ المستودع.

ويعمل البحث عبر --grep افتراضياً بحساسية لحالة الأحرف؛ لذلك يُنصح بإضافة الخيار -i لتجاهل الفرق بين الأحرف الكبيرة والصغيرة أثناء المطابقة.

Shell
# Search commit messages for a keyword (case-insensitive)
git log --grep="navbar" -i --oneline

# Combine author and message filters together
git log --author="Tariq" --grep="fix" -i --oneline

لاستعراض الالتزامات التي عدّلت ملفاً أو مجلداً بعينه فقط، مرر مسار الملف في نهاية الأمر بعد فاصل الشرطتين -- مثل git log --oneline -- index.html. يخبر الفاصل -- نظام Git صراحةً أن ما بعده هو مسار ملف على القرص وليس اسم مرجع.

وإذا كان الملف قد أُعيدت تسميته أو نُقل سابقاً بالأمر git mv، أضف الخيار --follow ليستمر Git في تتبع تاريخ الملف حتى قبل تغيير اسمه.

Shell
# View commits that modified a specific file path
git log --oneline -- index.html

# Trace a file history even across previous git mv renames
git log --follow --oneline -- style.css

ماذا لو أردت معرفة متى أُضيفت دالة برمجية معينة أو متى حُذف متغير CSS من المشروع بينما لم تذكر رسائل الالتزامات اسمه؟ يوفر Git أداة البحث الجراحي في الكود المعروفة باسم Pickaxe عبر الخيار بالحرف الكبير -S.

بخلاف --grep الذي يبحث في عناوين الرسائل فقط، يغوص الأمر git log -S داخل محتوى الملفات البرمجية نفسها ليرجع الالتزامات التي تغير فيها عدد مرات ظهور ذلك النص تحديداً إضافةً أو حذفاً.

عند إعداد تقارير الإنجاز أو سجل تغييرات الإصدار، يتيح لك Git التحكم الكامل في قالب المخرجات وتلخيص نشاط المساهمين عبر أداتين:

  • تخصيص التنسيق (--pretty=format): يستخدم رموزاً تعويضية دقيقة مثل %h للبصمة المختصرة، و%an لاسم المؤلف، و%ar للتاريخ النسبي، و%s لعنوان الرسالة.
  • ملخص المساهمين (git shortlog): يجمع التزامات المشروع حسب المؤلف؛ ويعرض الأمر git shortlog -sn جدولاً إحصائياً مرتباً تنازلياً بعدد الالتزامات لكل مطور.
Shell
# Custom log line: short hash - author (relative date): subject
git log --pretty=format:"%h - %an (%ar): %s" -n 5

# Summarize commit counts per contributor sorted descending
git shortlog -sn

يقارن الجدول المرجعي الشامل التالي بين جميع فلاتر البحث وخيارات التخصيص في سجل Git لاختيار الأداة الأنسب لكل مهمة:

الفلتر أو الأمرمثال الصيغة القياسيةنطاق الفحص أو التخصيصالسيناريو العملي المعتاد
--authorgit log --author="Sara"اسم المؤلف أو بريده الإلكترونيمراجعة الالتزامات الخاصة بمطور محدد
--since / --untilgit log --since="1 week ago"النطاق الزمني لتسجيل الالتزاماتحصر الأعمال المنجزة خلال أسبوع عمل
--grepgit log --grep="login" -iنصوص رسائل الالتزامات فقطالبحث عن ميزة أو رقم تذكرة إصلاح
--follow -- <file>git log --follow -- app.jsسجل ملف محدد حتى بعد إعادة تسميتهتتبع مراحل تطور ملف واحد عبر الزمن
-S "<code>"git log -S "fetchUser"الكود البرمجي المضاف أو المحذوف فعلياًاكتشاف الالتزام الذي أضاف أو حذف دالة
git shortlog -sngit shortlog -snتجميع وترتيب عدد الالتزامات لكل مؤلفاستخراج إحصائيات المساهمين في المشروع
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس تصفية السجل حسب المؤلف والتاريخ عبر --author و--since، والبحث في نصوص الرسائل بـ --grep -i، وتتبع تاريخ ملف محدد عبر --follow، والبحث الجراحي داخل الكود بالخيار -S، وتخصيص التقارير عبر --pretty=format وgit shortlog -sn. الخطوة التالية: انتقل الآن إلى الدرس 13 «مقارنة التعديلات والفروق عبر الأمر git diff» لمقارنة الفروق بين مجلد العمل ومنطقة التجهيز والالتزامات.

مشاركة

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

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Pickaxe Search (-S) البحث الجراحي في الكود (-S)
خيار متقدم في git log يفحص محتوى الملفات ليعثر على الالتزامات التي أضافت أو حذفت نصاً برمجياً محدداً.
للمراجعة
02 Pathspec Separator (--) فاصل مسار الملفات (--)
علامة الشرطتين التي توضع قبل أسماء الملفات لفصل خيارات الأمر عن مسارات القرص الصلب.
للمراجعة
03 Rename Following (--follow) تتبع إعادة التسمية (--follow)
خيار يجعل git log يواصل تتبع تاريخ الملف حتى عبر عمليات النقل أو تغيير الاسم السابقة.
للمراجعة
04 Shortlog Summary ملخص المساهمين (git shortlog)
أمر مدمج في Git يجمع الالتزامات حسب اسم المؤلف لإعداد تقارير المساهمات وملاحظات الإصدار.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 GREP GREP
Global Regular Expression Print
آلية البحث النصي بالأنماط المستخدمة في الخيار --grep لتصفية رسائل الالتزامات.
للمراجعة
02 ISO ISO
International Organization for Standardization
معيار صياغة التاريخ الرقمي القياسي YYYY-MM-DD المعتمد في فلاتر التاريخ.
للمراجعة
03 REGEX REGEX
Regular Expression
التعبيرات النمطية المدعومة في فلاتر البحث لمطابقة النصوص المرنة.
للمراجعة
04 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تُنفذ فيها استعلامات تصفية السجل وتنسيقه.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ الأمر git log --grep="init" -i --oneline ثم git log --since="1 month ago" --oneline لتجربة تصفية السجل بالرسالة والتاريخ.

  2. ابحث عن نص برمجي داخل تاريخ الكود عبر git log -S "html" --oneline ثم استخرج إحصائية المساهمين بالأمر git shortlog -sn.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

أي خيار في الأمر git log يصفّي السجل ليعرض فقط الالتزامات التي أنشأها مطور محدد؟

يُستخدم الخيار --author لتصفية الالتزامات حسب اسم المؤلف أو بريده الإلكتروني.

02

ما الفرق الجوهري بين الأمر git log --grep="auth" والأمر git log -S "auth"؟

يبحث --grep داخل نصوص رسائل الالتزامات فقط، بينما يبحث -S داخل محتوى الكود المضاف أو المحذوف فعلياً.

03

تؤدي إضافة الخيار -i مع الأمر git log --grep="bug" إلى البحث عن الكلمة دون حساسية لحالة الأحرف الكبيرة أو الصغيرة.

صواب؛ يجعل الخيار -i عملية البحث تطابق الكلمة بأي حالة أحرف كبيرة أو صغيرة.

04

أي خيار يضمن استمرار git log في تتبع تاريخ ملف محدد حتى قبل إعادة تسميته بالأمر git mv؟

يتتبع الخيار --follow تاريخ الملف عبر عمليات النقل وإعادة التسمية السابقة.

05

لماذا نضع علامة الشرطتين (--) قبل اسم الملف في الأمر git log --oneline -- index.html؟

تُخبر الشرطتان (--) نظام Git صراحةً أن المعامل التالي هو مسار ملف وليس اسم مرجع.

06

في قالب التنسيق git log --pretty=format:"%h - %an: %s"، ماذا يطبع الرمز التعويضي %h؟

يطبع الرمز الصغير %h البصمة الرقمية المختصرة للالتزام، بينما يطبع %H البصمة الكاملة.

07

أي أمر يطبع ملخصاً بعدد الالتزامات الإجمالي لكل مؤلف مرتباً تنازلياً من الأكثر مساهمة إلى الأقل؟

يلخص الأمر git shortlog -sn عدد الالتزامات لكل مطور ويرتبهم رقمياً بشكل تنازلي.

08

يقبل الخيار --since في أمر git log التواريخ الرقمية فقط مثل "2026-01-01" ويرفض العبارات النسبية مثل "2 weeks ago".

خطأ؛ يدعم Git العبارات الزمنية النسبية مثل "yesterday" و"2 weeks ago" بمرونة عالية.