پیدا کردن مسئول تغییرات
وقتی با یک باگ یا رفتار عجیب در کد روبرو میشوید، معمولاً اولین سوال این است: «چه کسی و چه زمانی این خط را نوشته؟» گیت ابزارهایی برای این کار دارد.
git blame
دستور blame هر خط یک فایل را به همراه نام نویسنده و کامیتی که آن خط را آخرین بار تغییر داده نشان میدهد:
git blame نامفایل
خروجی شبیه به این است:
a1b2c3d (علی محمدی 2024-03-15 10:22:31 +0330 1) function login() {
e4f5g6h (سارا احمدی 2024-03-20 14:10:05 +0330 2) if (!user) return;
a1b2c3d (علی محمدی 2024-03-15 10:22:31 +0330 3) }
blame روی بازهای از خطوط
برای بررسی فقط چند خط خاص (مثلاً خطوط ۱۰ تا ۲۵):
git blame -L 10,25 نامفایل
blame با نام کوتاهشدهی کامیت
git blame --abbrev=8 نامفایل
جستجو در تاریخچه با git log -S
برای یافتن کامیتی که یک رشتهی متنی خاص را اضافه یا حذف کرده:
git log -S "نامتابعیامتن" --oneline
این روش برای پیدا کردن اینکه چه زمانی یک قابلیت اضافه یا حذف شده بسیار مفید است.
جستجو با git log -G
برای جستجو با استفاده از regex در تغییرات:
git log -G "الگویregex" --oneline
git bisect — یافتن کامیت باگدار
وقتی میدانید باگی وجود دارد اما نمیدانید کدام کامیت آن را ایجاد کرده، bisect با جستجوی دودویی کامیت مشکلدار را پیدا میکند:
# شروع عملیات bisect
git bisect start
# علامتگذاری وضعیت فعلی بهعنوان خراب
git bisect bad
# علامتگذاری یک کامیت قدیمی که سالم بود
git bisect good هشکامیتسالم
گیت کامیتهای میانی را به شما نشان میدهد. بعد از بررسی هر کامیت:
git bisect good # اگر این کامیت سالم است
git bisect bad # اگر این کامیت خراب است
وقتی کامیت مشکلدار پیدا شد، برای پایان دادن به bisect:
git bisect reset