مقدمه

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

این درس به عنوان آخرین بخش از فصل عیب‌یابی، به بررسی این مشکلات رایج و ارائه راه‌حل‌های عملی برای آن‌ها می‌پردازد تا شما با اطمینان خاطر بیشتری با برنچ‌ها کار کنید.

مشکل ۱: نمی‌توانم یک برنچ را حذف کنم

علامت: شما دستور git branch -d my-feature را اجرا می‌کنید اما با یکی از این دو خطا مواجه می‌شوید:
۱. error: The branch 'my-feature' is not fully merged.
۲. error: Cannot delete branch 'my-feature' checked out at...

علت و راه‌حل:

  • خطای اول (Not fully merged): آپشن -d یک اقدام ایمنی است. گیت به شما اجازه نمی‌دهد برنچی را که کامیت‌های آن هنوز در برنچ دیگری ادغام نشده‌اند، حذف کنید تا از، از دست رفتن کد جلوگیری کند. اگر مطمئن هستید که به تغییرات آن برنچ نیازی ندارید، باید از آپشن -D (حرف بزرگ) برای حذف اجباری آن استفاده کنید:
    git branch -D my-feature
  • خطای دوم (Checked out at): شما نمی‌توانید برنچی را که در حال حاضر روی آن قرار دارید، حذف کنید. ابتدا باید با git checkout به یک برنچ دیگر (مانند main) بروید و سپس دستور حذف را اجرا نمایید.

مشکل ۲: یک برنچ ساخته‌ام اما در گیت‌هاب دیده نمی‌شود

علامت: شما با git checkout -b new-feature یک برنچ جدید ساخته و روی آن کامیت می‌کنید، اما وقتی به صفحه مخزن خود در گیت‌هاب می‌روید، آن برنچ وجود ندارد.

علت: ساختن یک برنچ به صورت محلی، آن را به صورت خودکار روی سرور ریموت ایجاد نمی‌کند. مخزن محلی شما و مخزن ریموت تا زمانی که شما به صراحت آن‌ها را همگام‌سازی نکنید، از هم بی‌خبر هستند.

راه‌حل: شما باید برنچ جدید خود را به ریموت push کنید. بهترین روش برای اولین push یک برنچ جدید، استفاده از آپشن -u یا --set-upstream است تا یک ارتباط تعقیب‌کننده بین برنچ محلی و ریموت شما ایجاد شود.

git push -u origin new-feature

پس از اجرای این دستور، برنچ شما در گیت‌هاب نیز در دسترس خواهد بود.

مشکل ۳: یک برنچ را به اشتباه حذف کرده‌ام!

علامت: شما به اشتباه با git branch -D یک برنچ را حذف کرده‌اید که حاوی کامیت‌هایی بود که در هیچ برنچ دیگری وجود نداشتند.

علت: استفاده از دستور حذف اجباری بدون ادغام کردن تغییرات.

راه‌حل: اینجا جایی است که یکی از ابزارهای نجات‌بخش گیت به نام reflog به کمک می‌آید. گیت یک لاگ یا تاریخچه از تمام حرکات اشاره‌گر HEAD را نگه می‌دارد. برای بازیابی برنچ:

  1. دستور git reflog را اجرا کنید. این دستور لیستی از تمام عملیات اخیر شما (کامیت، چک‌اوت، ریست و...) را به همراه هش کامیت مربوطه نشان می‌دهد.
  2. در لیست، آخرین کامیتی را که روی برنچ حذف‌شده خود داشتید، پیدا کنید. هش آن کامیت (مثلاً a1b2c3d) در ابتدای خط نوشته شده است.
  3. حالا می‌توانید برنچ خود را از آن کامیت دوباره بسازید:
    git checkout -b my-recovered-branch a1b2c3d

با این کار، برنچ شما با تمام کامیت‌هایش به سلامت بازیابی می‌شود.