Git rebase یا بازسازی گیت
بازسازی یا همان rebase
یکی از پرکاربردترین عملیاتها در گیت است.
قبل از rebase
برای اینکه یک rebase
مطمين داشته باشیم بهتر است قبل از عملیات یک نسخه پشتیبان (back up) از branch
مورد نظر خود بگیریم.
1.ابتدا به branch
موردنظر خود جابجا شوید (در اینجا نام branch
، my-feature-branch
است) :
git checkout my-feature-branch
2. بعد از آن یک branch
جدید از همان میگیریم:
git checkout -b my-feature-branch-backup
3. سپس به شاخه مورد نظر خود برمیگردیم:
git checkout my-feature-branch
الان یک بازسازی امن خواهیم داشت. در هر جای مسیر rebase
به مشکل خوردیم و نیاز به بازگشت به ابتدا داشیم، مراحل زیر را طی میکنیم:
1. ابتدا به شاخه اصلی برمیگردیم:
git checkout my-feature-branch
2. حالا با استفاده از شاخه پشتیبان آن را reset
میکنیم:
git reset --hard my-feature-branch-backup
توجه داشته باشید که اگر در حین بازسازی تغییراتی در شاخه اصلی انجام دهید، با reset
از بین خواهند رفت.
rebase ساده
با این بازسازی شما مطمین میشوید که تغییراتی که به صورت اساسی در شاخه دیگری انجام داده اید، در شاخه جدیدتان اعمال میشود. برای اینکار این عملیاتها را انجام دهید:
1.ابتدا به شاخه که تغییرات اساسی در آن وجود دارد و میخواهید تغییرات آن در شاخه موردنظرتان ادغام شود، بروید. (در اینجا فرض میکنیم میخواهیم شاخه master
را در شاخه موردنظر rebase
کنیم)
git fetch origin master
2. پس از آن به شاخه مورد نظر خود برمیگردیم:
git checkout my-feature-branch
۳. بازسازی را انجام میدهیم:
git rebase origin/master
۴. ممکن است در این بین پیامهایی دریافت کنید (این مطلب را بخوانید)
۵. پس از اتمام کار، باید force push
انجام دهید.
نکته مهم:
شما دو شاخه دارید که بر روی هر یک از آنها تغییرات و commit
هایی دارید. در زمان بازسازی، گیت commit
های شاخه مبدا را در ابتدا گذاشته و commit
های شاخه موردنظر را بعد از آن قرار میدهد.
force-push
زمانی که شما عملیاهای پیچیده ای نظیر بازسازی انجام میدهید، نیاز دارید تا این به روزرسانی ها را با اجبار در شاخه remote
ثبت کنید. برای اینکار از کد زیر استفاده کنید:
git push --force origin my-feature-branch
زمانی که شما بر روی یک شاخه اشتراکی کار میکنید، این روش پیشنهاد نمیشود. بهتر است به جای این روش، از کد زیر استفاده کنید:
git push --force-with-lease origin my-feature-branch
با اینکار، شما دیگر قادر به push
کردن در شاخه های محافظ شده نیستید. مگر اینکه:
۱. شاخه را از حفاظ خارج کنید.
۲. اجازه دهید از force-push
استفاده کند.
خیلی ممنون از مطلب مفیدتون
خیلی ساده و روون بیان شده
خواهش میکنم.
باعث افتحار ماست که از این مطلب استفاده کردید