ریبیس
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 تعارضی رخ داد:
- تعارض را حل کنید
- فایل را استیج کنید:
git add فایل - rebase را ادامه دهید:
git rebase --continue
برای لغو rebase و برگشت به وضعیت اولیه:
git rebase --abort
قانون طلایی rebase
هرگز روی کامیتهایی که به ریموت push شدهاند rebase نکنید. بازنویسی تاریخچهی مشترک باعث سردرگمی و مشکلات جدی برای اعضای تیم میشود.
rebase را فقط روی برنچهای محلی و شخصیتان انجام دهید.