بازپایه‌گذاری شاخه

پیش‌نمایش دستور

            

استفاده

git rebase [گزینه‌ها] [] []

Rebase چیست؟

Rebase کامیت‌های محلی را روی یک شاخه پایه دیگر اعمال می‌کند. برخلاف merge که commit جدید ایجاد می‌کند، rebase تاریخچه را خطی می‌کند.

تفاوت با Merge

  • Merge: تاریخچه‌ها را ترکیب می‌کند و merge commit ایجاد می‌کند.
  • Rebase: کامیت‌ها را روی شاخه دیگر اعمال می‌کند؛ تاریخچه خطی؛ بدون merge commit.
  • Rebase تاریخچه را بازنویسی می‌کند، Merge نه.
  • Rebase قبل از push مفید است تا merge commitهای اضافی ایجاد نشود.

مثال‌ها

# Rebase current branch onto develop
git rebase develop

# Interactive rebase for last 5 commits
git rebase -i HEAD~5

# Rebase onto another branch with autosquash
git rebase --interactive --autosquash feature

# Abort rebase
git rebase --abort

# Continue after resolving conflicts
git rebase --continue

# Skip a commit during rebase
git rebase --skip

محدودیت‌ها

  • بازنویسی تاریخچه خطرناک است اگر شاخه با دیگران به اشتراک گذاشته شده باشد.
  • ممکن است conflict رخ دهد و نیاز به حل دستی باشد.
  • پس از rebase شاخه‌های مشترک ممکن است نیاز به force push باشد.

گزینه‌ها

  • -i, --interactive : بازپایه‌گذاری تعاملی
  • --autosquash : خودکار squash کامیت‌های fixup
  • --continue : ادامه rebase پس از conflict
  • --abort : لغو rebase
  • --skip : رد کردن کامیت فعلی
  • --onto <newbase> : بازپایه‌گذاری روی شاخه جدید
  • -p, --preserve-merges : تلاش برای حفظ merge commitها
  • --exec <cmd> : اجرای دستور روی هر کامیت
  • --root : بازپایه‌گذاری همه کامیت‌ها از ریشه