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

فحص تفاصيل الالتزام وتتبع الأسطر عبر git show وgit blameGit Show and Git Blame

افحص بيانات أي التزام وتعديلاته أو محتوى ملف في إصدار سابق عبر الأمر git show، وتتبّع تاريخ تعديل كل سطر برمجي باستخدام الأمر git blame.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

بينما يستعرض الأمر git log سلسلة طويلة من الالتزامات المتتالية، يركز الأمر git show عدسته على التزام واحد محدد فقط؛ فيطبع بياناته الوصفية الكاملة متبوعة برقعة الفروق (Diff Patch) التي أحدثها.

عند تشغيل git show بدون معاملات، يفحص النظام أحدث التزام HEAD تلقائياً. ولفحص أي التزام سابق، مرر بصمته المختصرة المكونة من 7 محارف، أو أضف الخيار --stat لعرض ملخص الملفات المتأثرة فقط.

مخطط يوضح فحص الالتزامات والملفات القديمة بالأمر git show وتتبع تاريخ ومؤلف الأسطر بالأمر git blame والخيار -L
Shell
# Inspect the latest commit (HEAD) metadata and patch
git show

# Inspect a specific commit by short hash with file stats
git show 9f4c2a1 --stat

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

  • المرجع HEAD~1 (أو باختصار HEAD~): يشير إلى الالتزام الأب المباشر الذي يسبق اللقطة الحالية بخطوة واحدة.
  • المرجع HEAD~2: يشير إلى التزام الجد (قبل التزامين من الآن).
  • المرجع العام HEAD~N: يرجع إلى الوراء بمقدار N من الالتزامات المتسلسلة.
Shell
# Inspect the parent commit (1 step before HEAD)
git show HEAD~1 --stat

# Compare the grandparent commit with the current HEAD
git diff HEAD~2 HEAD

كثيراً ما تحتاج إلى رؤية محتوى ملف معين كما كان قبل عدة التزامات دون أن تغير ملفات مشروعك الحالية في مجلد العمل. تتيح لك الصيغة git show <revision>:<path> طباعة النص الكامل لأي ملف من أي لقطة تاريخية على الشاشة مباشرة.

انتبه إلى وجود النقطتين الرأسيتين : بدون أي مسافات بين مرجع الالتزام ومسار الملف، كما في المثال git show HEAD~2:index.html.

Shell
# Print the contents of index.html from 2 commits ago
git show HEAD~2:index.html

# Print a file from a specific commit hash
git show a1c0f9e:style.css

عند فحص سطر برمجي غامض أثناء تتبع الأخطاء، يتبادر إلى ذهنك السؤال: «أي التزام قام بآخر تعديل لهذا السطر تحديداً، ومتى، ومن الذي كتبه؟» يجيب الأمر git blame <file> عن هذا السؤال عبر إرفاق بطاقة تعريف بجوار كل سطر من أسطر الملف.

يعرض كل سطر في المخرجات أربع معلومات قبل الكود وهي البصمة المختصرة للالتزام، واسم المؤلف، والتاريخ، ورقم السطر. وبمجرد معرفة بصمة السطر، يمكنك تمريرها إلى git show لقراءة رسالة الالتزام وفهم السبب الهندسي للتعديل.

Shell
# Annotate every line of index.html with commit and author
git blame index.html

# Inspect the full context of the commit found via blame
git show 9f4c2a1

تحتوي الملفات البرمجية في المشاريع الفعلية على مئات الأسطر، مما يجعل استعراض الملف كاملاً أمراً مرهقاً. يتيح لك الخيار بالحرف الكبير -L <start>,<end> حصر تتبع git blame في نطاق أسطر محدد بدقة.

يمكنك تحديد رقم سطر البداية والنهاية مثل git blame -L 10,25 app.js، أو تحديد البداية وعدد الأسطر بعدها مثل -L 10,+6، كما يُنصح بإضافة الخيار -w لتجاهل التزامات تنسيق المسافات والوصول إلى الالتزام الذي كتب المنطق الفعلي.

Shell
# Blame only lines 1 through 8 of index.html
git blame -L 1,8 index.html

# Ignore whitespace formatting when blaming lines 5 to 12
git blame -w -L 5,12 style.css

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

الأمرمستوى التفصيلمثال الصيغة القياسيةالسؤال الهندسي الذي يجيب عنه
git logالخط الزمني للالتزاماتgit log --oneline -n 5ما هي أحدث اللقطات المسجلة في المشروع؟
git log -Sالبحث داخل الكودgit log -S "initAuth"أي التزام أضاف أو حذف هذه الدالة البرمجية؟
git diffمقارنة حالتين أو التزامينgit diff --stagedما هي الأسطر التي تغيرت بين منطقتين؟
git showفحص التزام واحد بعينهgit show HEAD~1ما بيانات ورقعة التعديلات لهذا الالتزام؟
git show <rev>:<file>نسخة ملف تاريخيةgit show HEAD~2:index.htmlكيف كان محتوى هذا الملف قبل التزامين؟
git blame -Lتتبع الأسطر البرمجيةgit blame -L 10,20 app.jsمن آخر مطور عدّل الأسطر من 10 إلى 20 ومتى؟
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

أتقنت في هذا الدرس فحص تفاصيل أي التزام منفرد عبر الأمر git show، والتنقل النسبي عبر الأسلاف بـ HEAD~1 وHEAD~2، وقراءة محتوى الملفات من لقطات قديمة عبر git show <rev>:<file>، وتتبع تاريخ ومؤلف كل سطر برمجي عبر git blame -L. الخطوة التالية: انتقل الآن إلى الموديول الرابع والدرس 15 لتعلّم كيفية التراجع الآمن عن تعديلات الملفات وإلغاء التجهيز.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Commit Inspection (git show) فحص الالتزام المنفرد (git show)
أمر في Git يعرض البيانات الوصفية الكاملة ورقعة الفروق لالتزام واحد محدد.
للمراجعة
02 Relative Reference (HEAD~N) المرجع النسبي للأسلاف (HEAD~N)
صياغة مختصرة تستخدم رمز المدة (~) للإشارة إلى الالتزام السابق بعدد N من الخطوات دون كتابة بصمته.
للمراجعة
03 Blob Revision Syntax (<rev>:<path>) صياغة عرض ملف تاريخي (<rev>:<path>)
صيغة تفصلها نقطتان رأسيتان في أمر git show لطباعة محتوى ملف كما كان في التزام سابق.
للمراجعة
04 Line Annotation (git blame) تتبع الأسطر البرمجية (git blame)
أمر تشخيصي يوضح بجوار كل سطر في الملف بصمة الالتزام واسم المؤلف والتاريخ الذي عدّل ذلك السطر آخر مرة.
للمراجعة

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

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

الاختصارات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 HEAD HEAD
Current Active Snapshot Pointer
المؤشر المرجعي الأساسي الذي تُقاس انطلاقاً منه المراجع النسبية مثل HEAD~1 وHEAD~2.
للمراجعة
02 SHA-1 SHA-1
Secure Hash Algorithm 1
بصمة الالتزام التي تظهر في مطلع كل سطر ضمن مخرجات الأمر git blame.
للمراجعة
03 BLOB BLOB
Binary Large Object
كائن محتوى الملف الداخلي في Git الذي يسترجعه الأمر git show عند قراءة ملف قديم.
للمراجعة
04 CLI CLI
Command Line Interface
واجهة سطر الأوامر المستخدمة لتنفيذ عمليات فحص اللقطات وتتبع الأسطر.
للمراجعة

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

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

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

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

0/2مهام منجزة
  1. نفّذ الأمر git show HEAD~1 --stat لفحص ملخص الالتزام السابق، ثم شغّل git show HEAD~1:index.html لقراءة محتوى الملف في تلك اللقطة.

  2. شغّل الأمر git blame -L 1,5 index.html في مستودعك لمعرفة الالتزام والمؤلف المسؤول عن آخر تعديل لأول 5 أسطر.

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

مساحة التحدي

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

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

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

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

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

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

ماذا يعرض الأمر git show عند تشغيله بدون أي معاملات افتراضياً؟

يعرض الأمر git show افتراضياً بيانات أحدث التزام (HEAD) مع رقعة التعديلات الخاصة به.

02

أي مرجع نسبي يشير إلى التزام الجد (أي قبل الالتزام الحالي بخطوتين)؟

يرجع المرجع النسبي HEAD~2 خطوتين إلى الوراء قبل المؤشر الحالي HEAD.

03

أي أمر يطبع المحتوى الكامل للملف style.css كما كان في الالتزام السابق مباشرة دون تعديل ملفات مجلد العمل؟

تطبع الصيغة git show HEAD~1:style.css محتوى الملف من اللقطة السابقة مباشرة على الشاشة.

04

يؤدي تشغيل الأمر git show HEAD~2:index.html إلى استبدال ملف index.html الحالي على القرص الصلب.

خطأ؛ يكتفي الأمر git show بطباعة المحتوى القديم على شاشة الطرفية فقط دون المساس بملفات القرص.

05

أي أمر في Git يرفق بكل سطر داخل الملف بصمة الالتزام واسم المؤلف والتاريخ الذي عدّل ذلك السطر آخر مرة؟

يتتبع الأمر git blame تاريخ ومؤلف كل سطر برمجي داخل الملف بدقة.

06

أي أمر يحصر مخرجات git blame لفحص الأسطر من 15 إلى 30 فقط داخل الملف app.js؟

يحدد الخيار -L 15,30 نطاق الأسطر المطلوب فحصه من السطر 15 حتى 30 فقط.

07

أي خيار في الأمر git show يطبع بيانات الالتزام ورسالته فقط مع إخفاء رقعة تعديلات الكود؟

يُخفي الخيار -s (أو --no-patch) رقعة الفروق ويكتفي بعرض بيانات الالتزام والرسالة.

08

يساعد تمرير الخيار -w مع الأمر git blame على تجاهل تعديلات المسافات الشكلية للوصول إلى الالتزام الذي كتب الكود الفعلي.

صواب؛ يتجاهل الخيار -w في git blame تغييرات المسافات البيضاء ليعرض الالتزام المسؤول عن المنطق البرمجي.