git blame
تتبّع الأخطاء
عرض من غيّر آخر مرة كل سطر في ملف
يطبع الأمر 'git blame' ملفًا مع الـ commit الذي غيّر كل سطر آخر مرة ومؤلفه وتاريخه. إنه أسرع طريقة لمعرفة سبب شكل سطر ما: خذ الـ hash ثم اقرأ الـ commit كاملًا بـ git show. الأسطر غير المسجَّلة بعد تُعلَّم بـ «Not Committed Yet». استخدم -L لرؤية بعض الأسطر فقط.
الصيغة
git blame [<options>] [<rev>] [--] <file>[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار
الخيارات
اختيار الخيار المناسب
معرفة مصدر تغيير
ثلاث أدوات، ثلاثة أسئلة
| الأمر | يجيب عن |
|---|---|
git blame file | أي commit لمس كل سطر آخر مرة؟ |
git log -p file | كل تغيير أُجري على الملف |
git log -S "text" | أي commit أضاف هذا النص أو أزاله؟ |
أمثلة
blame لملف
git blame app.jsكل سطر مع آخر commit له ومؤلفه وتاريخه.
نطاق من الأسطر
git blame -L 10,20 app.jsالأسطر من 10 إلى 20 فقط.
نسخة أقدم
git blame v1.0 -- app.jsblame للملف كما كان عند الوسم v1.0.
أمثلة على سير العمل
1
git blame -L 40,45 app.jsالعثور على commit السطر
2
git show a1b2c3dقراءة الـ commit كاملًا ورسالته
حل المشكلات
fatal: no such path 'x' in HEAD
السبب: الملف غير متتبَّع، أو المسار خاطئ
سجّل الملف أولًا، أو تحقّق من المسار
كل سطر يشير إلى commit إعادة تنسيق
السبب: يعرض blame آخر تغيير
استخدم --ignore-rev <commit>، أو اعمل blame للـ commit الذي قبله
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓اقرأ الـ commit (git show) قبل استخلاص النتائج من blame.
- ✓احتفظ بملف .git-blame-ignore-revs يسرد commits التنسيق فقط.
أخطاء متكررة
- ✗أخذ blame بمعنى اللوم: آخر من لمس السطر ربما أعاد تنسيقه فقط.
- ✗التوقف عند commit تنسيق بدل عمل blame لأبيه (git blame <hash>^ -- file).
- ✗نسيان -L في الملفات الكبيرة والتمرير عبر آلاف الأسطر.
الأسئلة الشائعة
A:
السطر آتٍ من أول commit في السجل: لم يستطع blame العودة أبعد.
A:
سطر غيّرته في نسخة العمل ولم تسجّله بعد.