راهنمای گیت

ریبیس

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

rebase ساده

فرض کنید روی برنچ feature هستید و می‌خواهید آن را به‌روز کنید:

git switch feature
git rebase main

گیت کامیت‌های برنچ feature را برمی‌دارد و آن‌ها را یکی‌یکی روی آخرین نقطه‌ی main اعمال می‌کند.

merge در مقابل rebase

merge:

A - B - C (main)
         \
          D - E (feature)

بعد از merge:
A - B - C - F (main)
         \ /
          D - E

rebase:

A - B - C (main)
                 \
                  D' - E' (feature)

با rebase تاریخچه خطی و تمیزتر می‌شود.

rebase تعاملی (Interactive Rebase)

قدرتمندترین استفاده از rebase حالت تعاملی آن است که به شما اجازه می‌دهد کامیت‌ها را ویرایش کنید:

git rebase -i HEAD~3

این دستور ۳ کامیت آخر را برای ویرایش باز می‌کند. در ویرایشگر می‌توانید برای هر کامیت یکی از این دستورات را انتخاب کنید:

دستورعملکرد
pickکامیت را بدون تغییر نگه می‌دارد
rewordپیام کامیت را تغییر می‌دهد
editکامیت را برای ویرایش محتوا متوقف می‌کند
squashاین کامیت را با کامیت قبلی ادغام می‌کند
dropکامیت را حذف می‌کند

ادامه یا لغو rebase

اگر در حین rebase تعارضی رخ داد:

  1. تعارض را حل کنید
  2. فایل را استیج کنید: git add فایل
  3. rebase را ادامه دهید: git rebase --continue

برای لغو rebase و برگشت به وضعیت اولیه:

git rebase --abort

قانون طلایی rebase

هرگز روی کامیت‌هایی که به ریموت push شده‌اند rebase نکنید. بازنویسی تاریخچه‌ی مشترک باعث سردرگمی و مشکلات جدی برای اعضای تیم می‌شود.

rebase را فقط روی برنچ‌های محلی و شخصی‌تان انجام دهید.