مقدمه

کامیت‌ها اسنپ‌شات‌های دائمی تاریخچه پروژه شما هستند. اما گاهی اوقات، ما در خود این اسنپ‌شات‌ها اشتباه می‌کنیم. ممکن است پیام کامیت را با غلط املایی بنویسیم، فایلی را فراموش کنیم به آن اضافه کنیم، یا حتی متوجه شویم که روی برنچ اشتباهی کامیت کرده‌ایم.

این درس به بررسی این اشتباهات رایج و نحوه اصلاح آن‌ها می‌پردازد. بسیاری از راه‌حل‌ها، کاربردهای عملی دستورات پیشرفته‌ای هستند که قبلاً یاد گرفته‌ایم، مانند amend، revert و reset.

مشکل ۱: پیام آخرین کامیت را اشتباه نوشته‌ام

علامت: شما به تازگی یک کامیت ثبت کرده‌اید و بلافاصله متوجه یک اشتباه در پیام آن می‌شوید.

علت: یک اشتباه تایپی یا عدم تمرکز در هنگام نوشتن پیام.

راه‌حل:

  • اگر کامیت هنوز Push نشده است: بهترین و ساده‌ترین راه‌حل، استفاده از دستور git commit --amend است. این دستور ویرایشگر متن را باز می‌کند و به شما اجازه می‌دهد پیام آخرین کامیت را ویرایش و اصلاح کنید. به یاد داشته باشید که این دستور تاریخچه را بازنویسی می‌کند.
    git commit --amend
  • اگر کامیت Push شده است: هرگز یک کامیت عمومی را amend نکنید. برای یک اشتباه تایپی کوچک، معمولاً بهترین کار نادیده گرفتن آن و دقت بیشتر در آینده است. اگر اصلاح پیام کاملاً ضروری است، راه‌حل امن استفاده از git revert و سپس کامیت مجدد با پیام صحیح است، اما این کار معمولاً برای یک پیام اشتباه، زیاده‌روی محسوب می‌شود.

مشکل ۲: فراموش کرده‌ام یک فایل را به آخرین کامیت اضافه کنم

علامت: شما یک کامیت ثبت کرده‌اید، اما git status نشان می‌دهد که یک فایل دیگر نیز تغییر کرده که باید بخشی از همان کامیت می‌بود.

علت: فراموش کرده‌اید فایل مورد نظر را قبل از کامیت، add کنید.

راه‌حل: این مشکل نیز (به شرطی که کامیت push نشده باشد) به راحتی با --amend حل می‌شود.

  1. ابتدا فایل فراموش‌شده را به Staging Area اضافه کنید:
    git add forgotten-file.txt
  2. سپس دستور amend را با آپشن --no-edit اجرا کنید. این آپشن تغییرات جدید را به کامیت قبلی اضافه می‌کند، بدون اینکه ویرایشگر پیام را باز کند.
    git commit --amend --no-edit

مشکل ۳: روی برنچ اشتباهی کامیت کرده‌ام

علامت: شما یک یا چند کامیت ثبت کرده‌اید و سپس متوجه می‌شوید که روی برنچ main بوده‌اید، در حالی که باید روی یک برنچ جدید کار می‌کردید.

علت: فراموش کرده‌اید قبل از شروع کار، یک برنچ جدید بسازید.

راه‌حل: این یک سناریوی بسیار رایج است و راه‌حل زیبایی دارد:

  1. ساختن برنچ صحیح از جای درست: ابتدا، یک برنچ جدید از همین نقطه فعلی (که شامل کامیت‌های اشتباه شماست) ایجاد کنید. این کار کامیت‌های شما را در یک شاخه امن قرار می‌دهد.
    git branch feature/my-new-feature
  2. بازگرداندن برنچ اشتباه: حالا به برنچ main (که اشتباهاً روی آن بودید) برگردید و آن را به وضعیت صحیح قبلی‌اش بازنشانی کنید.
    git checkout main
    git reset --hard HEAD~2
    هشدار: قبل از اجرای reset --hard مطمئن شوید که برنچ جدید را به درستی ساخته‌اید.

اکنون برنچ main شما تمیز است و تمام کامیت‌های شما به سلامت به برنچ feature/my-new-feature منتقل شده‌اند.