Midسختی 4 از ۵· در 74٪ مصاحبههای این حوزه پرسیده شده
تفاوت `git merge` و `git rebase` چیست و کدام را باید استفاده کرد؟
☆نشان کردنپاسخ کوتاه
`merge` یک Commit ادغام جدید میسازد و تاریخچه هر دو Branch را حفظ میکند؛ `rebase` Commitهای یک Branch را روی نوک Branch دیگر بازپخش میکند و یک تاریخچه خطی میسازد.
پاسخ کامل
فرض کنید Branch feature از main جدا شده و هر دو Commitهای جدید گرفتهاند.
git merge main(داخل feature): یک Commit جدید به نام «Merge Commit» میسازد که دو والد دارد؛ تاریخچه واقعی (که کِی از کجا جدا شد) کامل حفظ میشود اما گراف پیچیدهتر میشود.git rebase main(داخل feature): Commitهای feature را یکییکی برمیدارد و انگار از نوک فعلی main دوباره نوشته، پشت سر هم میچیند — تاریخچه خطی و تمیز میشود، اما Commitهای اصلی عملاً بازنویسی (Hash جدید) میشوند.
قاعده طلایی: هرگز روی Branchی که دیگران هم روی آن کار میکنند و آن را Pull کردهاند Rebase نکنید — چون Hash Commitها عوض میشود و تاریخچه بقیه با شما ناسازگار میشود.
مثال کد
# merge — امن برای Branchهای مشترک
git checkout feature
git merge main
# rebase — برای تمیزکردن تاریخچه یک Branch شخصی قبل از Pull Request
git checkout feature
git rebase main
نکته مهم
منبع کامل موضوع: Git Branching - Rebasing — Pro Git Book.
اشتباه رایج
❌ اجرای git rebase روی یک Branch مشترک که همکاران دیگر هم از آن Pull کردهاند — باعث تداخل تاریخچه برای کل تیم میشود.
شرکتهایی که این سؤال را پرسیدهاند
اسنپ
