مقدمه

یکی از اصلی‌ترین دلایل استفاده از یک سیستم کنترل نسخه، قابلیت بازبینی و مرور تاریخچه پروژه است. شما باید بتوانید ببینید چه کسی، چه زمانی و چه تغییری را ایجاد کرده است. این قابلیت برای پیدا کردن منشا باگ‌ها، درک روند توسعه پروژه و همکاری تیمی ضروری است.

در گیت، ابزار اصلی شما برای این کار، دستور قدرتمند git log است. این دستور به شما اجازه می‌دهد تا تاریخچه کامیت‌ها را به شکل‌های مختلف مشاهده، فیلتر و جستجو کنید. در این درس، با این دستور و آپشن‌های پرکاربرد آن آشنا خواهیم شد.

مرور تاریخچه با دستور git log

اگر در یک ریپوزیتوری گیت، دستور git log را بدون هیچ آپشنی اجرا کنید، لیستی از کامیت‌های انجام شده در برنچ فعلی را به ترتیب از جدیدترین به قدیمی‌ترین نمایش می‌دهد.

git log

خروجی این دستور برای هر کامیت شامل اطلاعات زیر است:

  • هش کامیت (Commit Hash): یک شناسه ۴۰ کاراکتری منحصربه‌فرد (از نوع SHA-1) که به صورت یکتا به آن کامیت اشاره دارد.
  • نویسنده (Author): نام و ایمیل شخصی که کامیت را ایجاد کرده است (بر اساس تنظیمات user.name و user.email).
  • تاریخ (Date): تاریخ و زمان دقیق ثبت کامیت.
  • پیام کامیت (Commit Message): پیامی که توسعه‌دهنده برای توصیف آن تغییر نوشته است.

آپشن‌های پرکاربرد و مفید

خروجی پیش‌فرض git log کمی طولانی است. خوشبختانه آپشن‌های زیادی برای سفارشی‌سازی آن وجود دارد.

  • --oneline: این آپشن تاریخچه را به صورت بسیار فشرده نمایش می‌دهد؛ در هر خط، فقط ۷ کاراکتر اول هش کامیت و عنوان پیام کامیت را نشان می‌دهد.
    git log --oneline
  • --stat: این آپشن علاوه بر اطلاعات اصلی کامیت، یک آمار خلاصه از فایل‌های تغییریافته در آن کامیت (تعداد خطوط اضافه/حذف شده) را نیز نمایش می‌دهد.
  • -p یا --patch: برای دیدن جزئیات دقیق تغییرات، این آپشن بهترین انتخاب است. patch در واقع تفاوت (diff) بین هر کامیت و کامیت قبلی آن را به صورت خط به خط نشان می‌دهد.
  • --graph: این آپشن تاریخچه را به صورت یک گراف متنی (ASCII) نمایش می‌دهد که در پروژه‌هایی با برنچ‌ها و مرج‌های متعدد، برای درک مسیر توسعه بسیار مفید است. معمولاً آن را با آپشن‌های دیگر ترکیب می‌کنند:
    git log --graph --oneline --decorate --all
    در این دستور، --decorate نشان می‌دهد که هر برنچ یا تگ به کدام کامیت اشاره دارد و --all تاریخچه تمام برنچ‌ها را (نه فقط برنچ فعلی) نمایش می‌دهد.

فیلتر کردن و جستجو در تاریخچه

در پروژه‌های بزرگ، تاریخچه کامیت‌ها می‌تواند هزاران خط باشد. git log ابزارهای قدرتمندی برای فیلتر کردن این لیست بلندبالا در اختیار شما قرار می‌دهد.

  • فیلتر بر اساس تعداد: با استفاده از -<n> می‌توانید فقط n کامیت آخر را مشاهده کنید. برای مثال، git log -5 فقط ۵ کامیت اخیر را نمایش می‌دهد.
  • فیلتر بر اساس زمان: با آپشن‌های --since و --until (یا --after و --before) می‌توانید یک بازه زمانی مشخص را بررسی کنید.
    git log --since="2 weeks ago"
    git log --since=2024-01-01 --until=2024-03-31
  • فیلتر بر اساس نویسنده: با آپشن --author می‌توانید فقط کامیت‌های یک شخص خاص را ببینید.
    git log --author="Ali Ahmadi"
  • فیلتر بر اساس پیام کامیت: با --grep می‌توانید در پیام‌های کامیت به دنبال یک کلمه یا عبارت خاص بگردید.
    git log --grep="fix login bug"
  • فیلتر بر اساس فایل: یکی از پرکاربردترین فیلترها، مشاهده تاریخچه تغییرات یک فایل یا پوشه خاص است. برای این کار، پس از آپشن‌ها، مسیر فایل را مشخص کنید.
    git log --oneline -- index.html

مشاهده جزئیات یک کامیت خاص با git show

گاهی اوقات شما نمی‌خواهید کل تاریخچه را ببینید، بلکه فقط به دنبال بررسی جزئیات یک کامیت خاص هستید. برای این کار از دستور git show استفاده می‌کنیم. کافیست هش کامیت مورد نظر را به عنوان آرگومان به این دستور بدهید.

git show 1a2b3c4

(لازم نیست کل هش ۴۰ کاراکتری را وارد کنید، ۷-۸ کاراکتر اول کافی است). خروجی این دستور، اطلاعات کامل آن کامیت به همراه جزئیات کامل تغییرات (patch) را نمایش می‌دهد. اگر هیچ هشی را مشخص نکنید، git show جزئیات آخرین کامیت را نمایش می‌دهد.