بازپایهگذاری شاخه
پیشنمایش دستور
استفاده
git rebase [گزینهها] [] [ ]
Rebase چیست؟
Rebase کامیتهای محلی را روی یک شاخه پایه دیگر اعمال میکند. برخلاف merge که commit جدید ایجاد میکند، rebase تاریخچه را خطی میکند.
تفاوت با Merge
- Merge: تاریخچهها را ترکیب میکند و merge commit ایجاد میکند.
- Rebase: کامیتها را روی شاخه دیگر اعمال میکند؛ تاریخچه خطی؛ بدون merge commit.
- Rebase تاریخچه را بازنویسی میکند، Merge نه.
- Rebase قبل از push مفید است تا merge commitهای اضافی ایجاد نشود.
مثالها
# Rebase current branch onto develop git rebase develop # Interactive rebase for last 5 commits git rebase -i HEAD~5 # Rebase onto another branch with autosquash git rebase --interactive --autosquash feature # Abort rebase git rebase --abort # Continue after resolving conflicts git rebase --continue # Skip a commit during rebase git rebase --skip
محدودیتها
- بازنویسی تاریخچه خطرناک است اگر شاخه با دیگران به اشتراک گذاشته شده باشد.
- ممکن است conflict رخ دهد و نیاز به حل دستی باشد.
- پس از rebase شاخههای مشترک ممکن است نیاز به force push باشد.
گزینهها
- -i, --interactive : بازپایهگذاری تعاملی
- --autosquash : خودکار squash کامیتهای fixup
- --continue : ادامه rebase پس از conflict
- --abort : لغو rebase
- --skip : رد کردن کامیت فعلی
- --onto <newbase> : بازپایهگذاری روی شاخه جدید
- -p, --preserve-merges : تلاش برای حفظ merge commitها
- --exec <cmd> : اجرای دستور روی هر کامیت
- --root : بازپایهگذاری همه کامیتها از ریشه