git blame

تتبّع الأخطاء

عرض من غيّر آخر مرة كل سطر في ملف


يطبع الأمر 'git blame' ملفًا مع الـ commit الذي غيّر كل سطر آخر مرة ومؤلفه وتاريخه. إنه أسرع طريقة لمعرفة سبب شكل سطر ما: خذ الـ hash ثم اقرأ الـ commit كاملًا بـ git show. الأسطر غير المسجَّلة بعد تُعلَّم بـ «Not Committed Yet». استخدم -L لرؤية بعض الأسطر فقط.

الصيغة

git blame [<options>] [<rev>] [--] <file>
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (2)

تعليق نطاق الأسطر المحدّد فقط، مثل -L 10,20 (أو دالة بـ -L :name).

موصى بهركّز على الأسطر التي تتحقق منها

مثال

git blame -L 12,14 app.js

عرض بريد المؤلف بدل اسمه.

عند الحاجةعرض بريد المؤلفين حين تلتبس الأسماء

مثال

git blame -e app.js

متقدم (1)

التظاهر بأن commit (مثل إعادة تنسيق كبيرة) لم يغيّر شيئًا؛ نسب الأسطر إلى commits أقدم.

عند الحاجةتخطّي commits التنسيق فقط

مثال

git blame --ignore-rev a1b2c3d app.js

اختيار الخيار المناسب

معرفة مصدر تغيير

ثلاث أدوات، ثلاثة أسئلة

الأمريجيب عن
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.js

blame للملف كما كان عند الوسم 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:

سطر غيّرته في نسخة العمل ولم تسجّله بعد.