في هذا الدرس 6تصفّح المواضيع
بينما يستعرض الأمر git log سلسلة طويلة من الالتزامات المتتالية، يركز الأمر git show عدسته على التزام واحد محدد فقط؛ فيطبع بياناته الوصفية الكاملة متبوعة برقعة الفروق (Diff Patch) التي أحدثها.
عند تشغيل git show بدون معاملات، يفحص النظام أحدث التزام HEAD تلقائياً. ولفحص أي التزام سابق، مرر بصمته المختصرة المكونة من 7 محارف، أو أضف الخيار --stat لعرض ملخص الملفات المتأثرة فقط.
# 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من الالتزامات المتسلسلة.
# 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.
# 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 لقراءة رسالة الالتزام وفهم السبب الهندسي للتعديل.
# 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 لتجاهل التزامات تنسيق المسافات والوصول إلى الالتزام الذي كتب المنطق الفعلي.
# 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
- واجهة سطر الأوامر المستخدمة لتنفيذ عمليات فحص اللقطات وتتبع الأسطر.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ الأمر git show HEAD~1 --stat لفحص ملخص الالتزام السابق، ثم شغّل git show HEAD~1:index.html لقراءة محتوى الملف في تلك اللقطة.
-
شغّل الأمر git blame -L 1,5 index.html في مستودعك لمعرفة الالتزام والمؤلف المسؤول عن آخر تعديل لأول 5 أسطر.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يعرض الأمر git show عند تشغيله بدون أي معاملات افتراضياً؟
يعرض الأمر git show افتراضياً بيانات أحدث التزام (HEAD) مع رقعة التعديلات الخاصة به.
أي مرجع نسبي يشير إلى التزام الجد (أي قبل الالتزام الحالي بخطوتين)؟
يرجع المرجع النسبي HEAD~2 خطوتين إلى الوراء قبل المؤشر الحالي HEAD.
أي أمر يطبع المحتوى الكامل للملف style.css كما كان في الالتزام السابق مباشرة دون تعديل ملفات مجلد العمل؟
تطبع الصيغة git show HEAD~1:style.css محتوى الملف من اللقطة السابقة مباشرة على الشاشة.
يؤدي تشغيل الأمر git show HEAD~2:index.html إلى استبدال ملف index.html الحالي على القرص الصلب.
خطأ؛ يكتفي الأمر git show بطباعة المحتوى القديم على شاشة الطرفية فقط دون المساس بملفات القرص.
أي أمر في Git يرفق بكل سطر داخل الملف بصمة الالتزام واسم المؤلف والتاريخ الذي عدّل ذلك السطر آخر مرة؟
يتتبع الأمر git blame تاريخ ومؤلف كل سطر برمجي داخل الملف بدقة.
أي أمر يحصر مخرجات git blame لفحص الأسطر من 15 إلى 30 فقط داخل الملف app.js؟
يحدد الخيار -L 15,30 نطاق الأسطر المطلوب فحصه من السطر 15 حتى 30 فقط.
أي خيار في الأمر git show يطبع بيانات الالتزام ورسالته فقط مع إخفاء رقعة تعديلات الكود؟
يُخفي الخيار -s (أو --no-patch) رقعة الفروق ويكتفي بعرض بيانات الالتزام والرسالة.
يساعد تمرير الخيار -w مع الأمر git blame على تجاهل تعديلات المسافات الشكلية للوصول إلى الالتزام الذي كتب الكود الفعلي.
صواب؛ يتجاهل الخيار -w في git blame تغييرات المسافات البيضاء ليعرض الالتزام المسؤول عن المنطق البرمجي.