فرصت مطالعه ندارید؟ چکیده این مطلب را همینجا گوش دهید:
بسیاری از برنامهنویسان هنگام مواجهه با یک باگ عجیب یا نیاز به بررسی روند تغییرات یک قطعه کد، تنها به اجرای دستور سادهی git log اکتفا میکنند. نتیجه این کار مواجهه با فهرستی بلندبالا، به هم ریخته و خستهکننده از کامیتهاست که پیدا کردن پاسخ را به کاری زمانبر تبدیل میکند. کنترل نسخه ابزاری قدرتمند است، مشروط بر اینکه بدانیم چگونه اطلاعات مد نظر خود را از دل تاریخچه بیرون بکشیم. استفاده از قابلیتها و سوئیچهای پیشرفتهی گیت لاگ به شما اجازه میدهد در چند ثانیه بفهمید دقیقاً چه کسی، چه زمانی و چرا خط خاصی از کد را تغییر داده است. در این مقاله قصد داریم با ترفندهای طلایی خط فرمان آشنا شویم که فرآیند عیبیابی و بررسی پروژهها را به شدت متحول میکنند.
| ویژگی / مشخصات | مقدار / وضعیت |
|---|---|
| ابزار هدف | گیت (Git Log) |
| نوع آموزش | پیشرفته و کاربردی (CLI) |
| سطح مهارت | متوسط تا پیشرفته |
| هزینه | ۱۰۰٪ رایگان و متنباز |
| وضعیت دسترسی ایران | بدون محدودیت (دسترسی کامل) |
جستجوی قدرتمند متن و توابع با سوئیچ S-
یکی از مفیدترین و در عین حال ناشناختهترین قابلیتهای گیت، توانایی جستجوی تغییراتِ یک عبارت خاص در میان تمام کامیتهای تاریخچه است. فرض کنید متوجه شدهاید یک تابع یا متغیر خاص مقداری نامعتبر برمیگرداند و میخواهید بدانید دقیقاً در چه کامیتی این قطعه کد اضافه یا دستکاری شده است. با استفاده از سوئیچ -S میتوانید به گیت بگویید کامیتهایی را پیدا کند که موجب تغییر تعداد یا وجود یک رشته متن خاص شدهاند.
دستور زیر را در ترمینال و درون ریشه پروژه خود اجرا کنید تا تمام کامیتهایی که در آنها عبارت مشخصشده دستکاری شده است نمایش داده شوند:
git log -S "calculateTotalPrice" --onelineبخشبهبخش این دستور شامل موارد زیر است:
- دستور اصلی
git logبرای خواندن تاریخچه مخزن استفاده میشود. - سوئیچ
-Sبه دنبال تغییراتی میگردد که عبارت داخل نقلقول را به کد اضافه یا از آن کم کردهاند. - پارامتر
--onelineخروجی را فشرده کرده و هر کامیت را فقط در یک خط همراه با هش کوتاه نمایش میدهد.
خروجی نمونه این دستور به شکل زیر خواهد بود که نشان میدهد این تابع در کدام کامیتها دستکاری شده است:
a1b2c3d افزودن تخفیف پویا به تابع calculateTotalPrice
e5f6g7h اصلاح محاسبات مالیاتی در تابع calculateTotalPrice
i9j0k1l پیادهسازی اولیه calculateTotalPrice در سیستم پرداختنمایش گرافیکی و درخت شاخهها با فرمتهای سفارشی
دیدن تاریخچه خطی پروژههایی که چندین شاخه (Branch) و ادغام (Merge) دارند کار آسانی نیست. گیت ابزار فوقالعادهای برای ترسیم گرافیکی شاخهها در اختیار شما میگذارد که با ترکیب آن با گزینههای قالببندی سفارشی، میتوانید ساختار پروژه را به شکلی کاملاً خوانا و رنگی مشاهده کنید.
اجرای دستور زیر یک نمای درختی رنگارنگ از تاریخچه کامیتها، شاخهها و تگها به شما تحویل میدهد:
git log --graph --oneline --all --decorateتوضیح اجزای این دستور نمایشی:
- سوئیچ
--graphیک نمودار متنی از انشعابها و ادغامها در سمت چپ خطوط ترسیم میکند. - سوئیچ
--allتضمین میکند که تاریخچه تمام شاخهها (ملی و ریموت) نمایش داده شود، نه فقط شاخهای که در حال حاضر روی آن هستید. - سوئیچ
--decorateنام شاخهها و تگهای مرتبط با هر کامیت را کنار هش آن نشان میدهد.
خروجی نمونه این دستور گرافیکی بهصورت زیر خواهد بود:
* m9n8o7p (HEAD -> main, origin/main) Merge branch 'feature/login'
|\
| * l3k2j1h افزودن اعتبارسنجی توکن در صفحه ورود
| * g4f3e2d طراحی اولیه فرم لاگین
* | z9y8x7w اصلاح باگ بحرانی در اتصال دیتابیس
|/
* a1b2c3d کامیت اولیه پروژهاگر در پروژههای خود بهینهسازی کدهای فرانتاند و مدیریت استایلها را انجام میدهید، مطالعهی مقاله مفید راهنمای جامع طراحی پالتهای رنگی دسترسپذیر در وب (WCAG) میتواند دید خوبی درباره استانداردهای توسعه رابط کاربری به شما بدهد.
فیلتر کردن پیشرفته کامیتها براساس بازه زمانی و نویسنده
وقتی زمان دیباگ محدود است، نیازی نیست کل تاریخچه چندساله پروژه را مرور کنید. شما میتوانید گیت لاگ را محدود به زمان مشخص، تاریخهای خاص یا یک توسعهدهنده معین کنید. این کار سرعت رسیدن به پاسخ را چند برابر میکند.
دستور زیر کامیتهای انجام شده توسط یک نویسنده خاص را در یک بازه زمانی مشخص (مثلاً از ابتدای ماه میلادی جاری) فیلتر میکند:
git log --author="Ali" --since="2026-10-01" --until="2026-10-24" --no-mergesبررسی نحوه کارکرد این فیلترها:
- پارامتر
--authorنام یا ایمیل توسعهدهنده را فیلتر میکند (بخشی از نام هم قابل قبول است). - پارامترهای
--sinceو--untilمرزهای بازه زمانی را بر اساس تاریخ میلادی تعیین میکنند. - سوئیچ
--no-mergesکامیتهای مربوط به ادغام شاخهها را حذف میکند تا فقط کدهای نوشته شده نمایش داده شوند.
نمونه خروجی این فیلتر به شکل زیر است:
commit 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b
Author: Ali Rezaei <[email protected]>
Date: Thu Oct 15 14:30:00 2026 +0330
بهینهسازی کوئریهای پایگاه داده در بخش گزارشاتپیدا کردن سریع اولین کامیتِ ایجاد یک فایل خاص
گاهی اوقات فایلی در پروژه وجود دارد که رفتار نادرستی دارد یا میخواهید بدانید چه کسی و با چه هدفی آن را از ابتدا ساخته است. دستور استاندارد git log filename تمام تغییرات فایل را نشان میدهد، اما اگر بخواهید مستقیماً به سراغ اولین نسخه و کامیت ایجاد آن بروید، ترفند دیگری وجود دارد.
دستور زیر اولین کامیت ثبت شده برای یک فایل مشخص را پیدا میکند:
git log --follow --name-only --oneline | tail -n 20البته روش اختصاصیتر و دقیقتر برای پیدا کردن تولد یک فایل خاص به شکل زیر است:
git log --diff-filter=A --summary -- src/database.jsتحلیل دستور بالا:
- سوئیچ
--diff-filter=Aبه گیت دستور میدهد فقط به دنبال کامیتهایی باشد که در آنها فایلی اضافه (Added) شده است. - سوئیچ
--summaryاطلاعات خلاصهای از تغییرات فایل در آن کامیت خاص را نشان میدهد. - مسیر فایل مورد نظر در انتهای دستور (مثلاً
src/database.js) مشخص میشود.
خروجی نمونه به شما نشان خواهد داد که فایل دقیقاً در چه تاریخی و توسط چه کسی متولد شده است:
commit f1e2d3c4b5a6
Author: Sara Mohammadi <[email protected]>
Date: Mon Jan 12 10:00:00 2026 +0330
ایجاد ساختار اولیه فایل اتصال به پایگاه داده
create mode 100644 src/database.jsبرای توسعهدهندگانی که در کنار گیت، به بهینهسازی کدهای سمت سرور و افزایش سرعت برنامههای خود اهمیت میدهند، بررسی مقاله کاربردی آموزش فستآپای (FastAPI)؛ فریمورک سریع پایتون برای ساخت API پیشنهاد میشود.
پرسشهای متداول
چگونه میتوانم خروجی گیت لاگ را به یک فایل متنی ذخیره کنم؟
شما میتوانید به سادگی با استفاده از عملگر هدایت خروجی (>) در ترمینال، تمام نتایج جستجو را در یک فایل ذخیره کنید. به عنوان مثال دستور git log --oneline > history.txt خروجی را در فایلی به نام history.txt ذخیره میکند.
آیا میتوانم فرمت نمایش تاریخچه را شخصیسازی کنم تا اطلاعات کمتری نشان دهد؟
بله، گیت امکان قالببندی سفارشی را با سوئیچ --format فراهم میکند. برای مثال دستور git log --format="%h - %an: %s" فقط هش کوتاه، نام نویسنده و پیام کامیت را در یک خط منظم چاپ میکند.
چگونه تغییرات خط به خط یک فایل خاص را در طول زمان بررسی کنیم؟
برای بررسی اینکه هر خط از یک فایل توسط چه کسی و در چه کامیتی ویرایش شده است، به جای گیت لاگ باید از دستور git blame filename استفاده کنید که نظیرهای پیشرفته برای تحلیل خطوط است.
جمعبندی
تسلط بر دستورات پیشرفته git log به شما کمک میکند به جای جستجوی کورکورانه در فایلها و کدها، به شکل مستقیم و هوشمندانه به ریشه تغییرات دست پیدا کنید. استفاده از سوئیچهای جستجوی متنی مثل -S، ترسیم نمودارهای درختی با --graph و فیلتر کردن دقیق زمانی و نامی، زمان دیباگ پروژههای بزرگ را به حداقل میرساند. با تمرین این دستورات در خط فرمان، سرعت و دقت خود را در مدیریت کدهای مخزن به سطح یک توسعهدهنده حرفهای ارتقا دهید.




