CodeShot
Juniorسختی 3 از ۵· در 78٪ مصاحبه‌های این حوزه پرسیده شده

تفاوت git merge و git rebase چیست؟

نشان کردن

پاسخ کوتاه

merge یک Commit ادغام جدید می‌سازد و تاریخچه را حفظ می‌کند؛ rebase Commitهای یک شاخه را روی نوک شاخهٔ دیگر بازنویسی می‌کند و تاریخچه را خطی می‌کند.

پاسخ کامل

merge دو تاریخچه را با یک Commit ادغام‌کننده (Merge Commit) ترکیب می‌کند؛ تاریخچهٔ واقعی رویدادها حفظ می‌شود اما گراف شاخه‌ها شلوغ‌تر می‌شود.

rebase کامیت‌های شاخهٔ فعلی را یکی‌یکی روی آخرین نسخهٔ شاخهٔ مقصد بازپخش می‌کند؛ نتیجه یک تاریخچهٔ خطی و تمیز است، اما Commit Hashها تغییر می‌کنند.

قاعدهٔ طلایی: هرگز شاخه‌ای که دیگران هم روی آن کار می‌کنند و Push کرده‌اند را rebase نکنید.

مثال کد

# merge
git checkout main
git merge feature/x

# rebase
git checkout feature/x
git rebase main

نکته مهم

در تیم‌هایی که تاریخچهٔ تمیز اهمیت دارد، rebase قبل از merge کردن یک Pull Request رایج است.

اشتباه رایج

❌ rebase کردن یک شاخهٔ مشترک که دیگران روی آن Commit جدید زده‌اند (باعث تداخل تاریخچه برای همه می‌شود).