لمعرفة الـ commit الذي أجرى آخر تغيير على سطر في مشروع Git محلي على جهاز Mac الخاص بك، افتح تطبيق Terminal، وانتقل إلى المستودع، ثم شغّل git blame على الملف مع تحديد نطاق أرقام الأسطر. بعد ذلك، افحص ذلك الـ commit باستخدام git show لقراءة رسالته وفارق التغييرات (diff). يحدد أمر Blame آخر تعديل طرأ على السطر الحالي؛ ولا يكشف دائمًا متى ظهر السطر لأول مرة أو سبب كتابته.

1. افتح المستودع في Terminal

إذا كان المشروع مفتوحًا لديك بالفعل في Finder، فافتح Terminal واكتب cd ، ثم اسحب مجلد المشروع وأفلته داخل نافذة Terminal واضغط على Return. سيقوم macOS بإدراج مسار المجلد تلقائيًا؛ وهذا يجنبك الأخطاء المطبعية. بدلاً من ذلك، أدخل المسار بنفسك وضعه بين علامتي اقتباس إذا كان يحتوي على مسافات، على سبيل المثال:

cd "/Users/sam/Projects/My App"

تحقق من أنك داخل شجرة عمل Git (working tree) وأن Git متاح للعمل:

git status --short
git --version

إذا أظهر الأمر الأول أن الدليل الحالي ليس مستودع Git، فانتقل إلى دليل المستودع الفعلي للمشروع. وإذا كان git غير متاح، فقم بتثبيته أو تمكينه من خلال إعداد تثق به قبل المتابعة. تستخدم الأوامر أدناه بنية الأوامر القياسية لـ shell وتعمل في الـ shell الافتراضي لـ Terminal في macOS وكذلك في بقية بيئات shell الشائعة.

2. شغّل blame للسطر الذي يهمك

ابحث عن رقم السطر في المحرر الخاص بك، ثم استبدل مسار الملف ورقم السطر أدناه. المسار يكون نسبيًا بالنسبة لجذر المستودع؛ ضعه بين علامتي اقتباس عندما يحتوي على مسافات أو رموز خاصة بـ shell (metacharacters).

git blame -L 42,42 -- "Sources/Settings.swift"

يقوم الخيار -L 42,42 بقصر التعليق التوضيحي على السطر 42 فقط. يبدأ Git في ترقيم الأسطر من 1. لفحص السياق المحيط، استخدم نطاقًا مثل -L 38,46. يطبع Git معرّف الـ commit، وبيانات المؤلف، ومعلومات التاريخ، ونص السطر. توضح وثائق Git أن أمر blame يعرض المراجعة (revision) والمؤلف الذي عدّل كل سطر لآخر مرة، ويدعم تحديد نطاقات الأسطر باستخدام -L. وثائق Git blame

إذا كنت لا تعرف رقم السطر، فافتح الملف في محررك واستعن بأرقام الأسطر المعروضة فيه. يمكنك أيضًا تشغيل blame على الملف بأكمله بحذف الخيار -L:

git blame -- "Sources/Settings.swift"

عندما لا تكون في جذر المستودع، استخدم مسارًا نسبيًا بالنسبة إلى الدليل الذي قمت بتشغيل الأمر منه. إذا أظهر Git أن المسار غير موجود، فتحقق من الدليل الحالي (pwd) ومن حالة الأحرف الدقيقة وصحة هجاء المسار.

3. قراءة تفاصيل الـ commit الذي حدده blame

انسخ معرّف الـ commit المعروض للسطر المستهدف ومرره إلى git show:

git show --format=fuller --stat a1b2c3d

استبدل a1b2c3d بالمعرّف المأخوذ من المخرجات لديك. يؤدي هذا إلى عرض البيانات الوصفية للـ commit وملخص للملفات. ولقراءة التغييرات الترقيعية (patch) أيضًا، احذف الخيار --stat:

git show --format=fuller a1b2c3d

ألقِ نظرة على الأسطر المغيّرة حول السطر المستهدف، ورسالة الـ commit، والملفات الأخرى التي تم تغييرها في نفس الـ commit. يمكن أن تساعد هذه التفاصيل في توضيح سياق التغيير. تسجل رسالة الـ commit ما كتبه مؤلفه؛ وليست دليلاً قاطعًا على المنطق الكامن وراء التصميم. توضح وثائق Git أن الأمر git show يعرض معلومات الـ commit وفارق النصوص الخاص به. وثائق Git show

عندما يشير blame إلى commit خاص بالتنسيق أو نقل الأكواد

قد يكون السطر قد تأثر بعملية تنسيق واسعة، أو إعادة تسمية، أو نقل للكود. في هذه الحالة، قد لا يكون الـ commit المشار إليه هو الـ commit الذي أدخل المنطق البرمجي في الأصل. جرب استخدام خاصية اكتشاف النقل والنسخ:

git blame -M -C -L 42,42 -- "Sources/Settings.swift"

يطلب الخيار -M من Git اكتشاف الأسطر المنقولة داخل نفس الملف، بينما يبحث الخيار -C أيضًا عن الأسطر المنسوخة أو المنقولة من ملفات أخرى. تساعد هذه الخيارات Git على تتبع بعض عمليات إعادة الهيكلة (refactors)، لكن الاكتشاف يعتمد على تطابق المحتوى وقد لا يحل جميع مسارات السجل التاريخي. وثائق Git blame

إذا كان المستودع يحتوي على ملف .git-blame-ignore-revs للتغييرات الواسعة مثل التنسيق، فيمكنك أن تطلب من Git استخدامه:

git blame --ignore-revs-file .git-blame-ignore-revs -L 42,42 -- "Sources/Settings.swift"

يمكن أن يسهل ذلك ملاحظة التغيير المعني، لكن المراجعات المتجاهلة تؤثر على التعليقات التوضيحية؛ افحص ملف التجاهل في المستودع أو قارن النتيجة بتشغيل blame بدون هذا الخيار إذا بدت النتيجة مفاجئة. تذكر وثائق Git هذا الخيار، وتوثق GitHub نفس اصطلاح ملف تجاهل المراجعات. وثائق Git blame

ما لا يمكن لـ blame إخبارك به

يقوم أمر Blame بوضع تعليقات توضيحية على الأسطر الموجودة في إصدار الملف المحدد. وهو لا يعرض مباشرة الأسطر المحذوفة أو المستبدلة، وقد يختلف الـ commit المعدِّل الأحدث عن الإدخال الأصلي للسطر. بالنسبة للنصوص المحذوفة أو حالات الملف السابقة، افحص فروقات الـ commit وسجل التعديلات؛ تشير وثائق blame في Git إلى استخدام git diff وعمليات البحث في السجل التاريخي للتغييرات التي أزالت المحتوى أو استبدلته. وثائق Git blame

إذا كان المستودع مستضافًا على GitHub وكان بإمكانك الوصول إليه، فيمكنك أيضًا فتح الملف واختيار Blame للاطلاع على السجل سطرًا بسطر في المتصفح. انقر فوق رسالة الـ commit لمعاينة ذلك التغيير، أو استخدم أداة التحكم في الإصدارات لعرض الملف كما كان قبله. وثائق GitHub: عرض الملفات وفهمها

المصادر