تفاوت میان دستورات merge و rebase در git
rebase و mege هر دو برای یکپارچه سازی تغییرات از یک branch به branch دیگر طراحی شده اند اما هر یک به روش مختلفی این کار را انجام می دهند.
در این مقاله به branch ی که تغییرات در آن صورت گرفته و یا ويژگی های جدیدی به آن اضافه شده feature branch و به branch ی که می خواهیم روی آن ادغام انجام شود master branch می گوییم.
برای مثال، بیاید در نظر بگیریم که ما commit هایی به صورت زیر داریم، نتیجه merge به صورت ترکیب commit ها خواهد بود در حالیکه rebase همه تغییرات در feature branch را از شروع آخرین commit از master branch اضافه می کند.
- زمانی که شما یک branch را روی master ادغام به روش rebase می کنید، شما پایه feature branch را به نقطه پایانی master branch منتقل می کنید.
- merge محتوای feature branch را می گیرد و آن را با master branch یکپارچه می کند. در نتیجه فقط master branch تغییر می کند. تاریخچه feature branch دست نخورده باقی می ماند.
- merge در نتیجه commit جدیدی به تاریخچه شما اضافه می کند.
commit به این شکل خواهد بود:
چه موقع از rebase استفاده کنیم؟ چه موقع از merge استفاده کنیم؟
اگر feature branch با سایر برنامه نویس ها مشترک است، rebase توصیه نمی شود، چون فرآیند rebase مخزن ناسازگاری ایجاد می کند.
اگر شما می خواهید تاریخچه را به طور کامل به همان صورتی که اتفاق افتاده ببینید شما باید از merge استفاده کنید. merge تاریخچه را حفظ می کند در حالیکه rebase آن را rewrite می کند.
rebase برای ساده سازی یک تاریخچه پیچیده بهتر است، شما قادر هستید تاریخچه commit را تغییر دهید. شما می توانید commit های نامطلوب را حذف کنید، دو یا چند commit را به یکی فشرده کنید یا پیام commit را ویرایش کنید.
rebase همه تداخل های یک commit را در یک زمان نشان می دهد در حالیکه merge همه آنها را در یک بار نشان می دهد. هندل کردن تداخل ها آسانتر و بهتر است اما نباید فراموش کنید که بازگرداندن rebase خیلی سخت تر از بازگردن یک merge است اگر تداخل های زیادی داشته باشیم.