فصل سوم: شاخه‌بندی و ادغام

rebase و تفاوت آن با merge

روش دیگری برای ترکیب تغییرات

rebase یک راه جایگزین برای merge است که به‌جای ساختن یک commit ادغام جدید، commitهای شاخه‌ی فعلی را «بازپخش» می‌کند روی نوک شاخه‌ی مقصد؛ گویی از ابتدا روی آخرین نسخه‌ی main شروع به کار کرده بودید. نتیجه یک تاریخچه‌ی خطی و تمیزتر است، بدون commitهای ادغام اضافی.

git switch feature/login
git rebase main

پس از rebase، شناسه‌ی commitهای شاخه‌ی feature تغییر می‌کند، چون از نظر گیت این commitهای جدیدی هستند که روی پایه‌ی جدیدی ساخته شده‌اند. به همین دلیل یک قاعده‌ی طلایی وجود دارد: هرگز شاخه‌ای را که دیگران هم روی آن کار می‌کنند یا از قبل push شده و به اشتراک گذاشته شده، rebase نکنید. چون شناسه‌ی commitها عوض می‌شود و باعث سردرگمی و تداخل در تاریخچه‌ی همکارانتان می‌شود.

کاربرد امن rebase

رایج‌ترین استفاده‌ی امن، تازه نگه‌داشتن یک شاخه‌ی شخصی و محلی نسبت به main پیش از باز کردن Pull Request است:

git fetch origin
git rebase origin/main

همچنین git rebase -i (interactive rebase) امکان ویرایش، ترکیب یا حذف چند commit آخر را پیش از ارسال آن‌ها می‌دهد؛ ابزاری عالی برای تمیز کردن تاریخچه پیش از Pull Request. قاعده‌ی کلی ساده است: merge برای تاریخچه‌ی مشترک و عمومی، rebase برای تاریخچه‌ی شخصی و هنوز به‌اشتراک‌نگذاشته.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.