git grep
البحث عن نص في الملفات المتتبَّعة
يبحث الأمر 'git grep' في الملفات التي يتتبعها Git ويطبع كل سطر مطابق مع اسم ملفه. إنه أسرع من grep العادي في المشاريع الكبيرة، ويتخطى الملفات غير المتتبَّعة والمتجاهَلة (مثل node_modules)، ويمكنه البحث في أي commit أو فرع دون استخراجه.
الصيغة
git grep [<options>] <pattern> [<tree>...] [--] [<pathspec>...]الخيارات
اختيار الخيار المناسب
git grep vs grep
لماذا بحث Git نفسه
| الأمر | يبحث في | النسخ القديمة |
|---|---|---|
grep -r | كل ملف على القرص، بما فيه node_modules | No |
git grep | الملفات المتتبَّعة فقط | نعم: git grep x <commit> |
أمثلة
البحث عن نص
git grep "cart"كل سطر في كل ملف متتبَّع يحتوي cart.
مع أرقام الأسطر
git grep -n "cart"يضيف رقم السطر.
في commit آخر
git grep "cart" v1.0البحث في المشروع كما كان في v1.0.
بعض الملفات فقط
git grep "TODO" -- "*.js"حصر البحث في ملفات JavaScript.
أمثلة على سير العمل
git grep -n "count("كل استدعاء مع سطره
git grep -l "count("قائمة الملفات المطلوب تحريرها
حل المشكلات
لا مخرجات، رمز الخروج 1
السبب: لا تطابق
تحقّق من الإملاء، جرّب -i، أو تأكد أن الملف متتبَّع
ملف أنشأته للتو لا يُبحث فيه
السبب: يبحث git grep في الملفات المتتبَّعة فقط
نفّذ git add عليه، أو استخدم git grep --untracked
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓فعّل أرقام الأسطر مرة واحدة: git config --global grep.lineNumber true.
- ✓ابحث في الإصدارات القديمة بـ git grep <pattern> <tag> بدل استخراجها.
أخطاء متكررة
- ✗توقّع ظهور الملفات غير المتتبَّعة في النتائج — أضفها أولًا، أو استخدم --untracked.
- ✗نسيان علامات الاقتباس حول الأنماط التي فيها مسافات أو رموز خاصة.
الأسئلة الشائعة
نعم: الأساسية افتراضيًا، و-E للموسّعة، و-P لصيغة Perl.
يبحث في الأشجار التي تسمّيها؛ ولإيجاد الـ commit الذي أضاف نصًا استخدم git log -S "text".