ادغام شاخه‌ها

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

            

استفاده

git merge [گزینه‌ها] <شاخه>

موارد کاربرد رایج

  • ادغام یک شاخه دیگر به شاخه جاری: git merge feature
  • ایجاد commit ادغام حتی اگر fast-forward ممکن باشد: git merge --no-ff feature
  • ترکیب کامیت‌ها بدون انجام commit: git merge --squash feature
  • لغو عملیات merge: git merge --abort

مثال‌ها

git merge feature        # Merge 'feature' into current branch
git merge --no-ff feature # Create merge commit even if fast-forward
git merge --squash feature # Combine commits without committing
git merge --abort        # Abort an ongoing merge
git merge --commit       # Perform commit (default)
git merge --no-commit    # Merge but do not commit
git merge --strategy=recursive -X theirs feature # Use 'theirs' option with recursive strategy

محدودیت‌ها

  • نمی‌توان merge انجام داد اگر تغییرات ذخیره‌نشده وجود داشته باشد که با شاخه مورد نظر تضاد داشته باشد
  • تضادهای merge باید دستی حل شوند
  • merge fast-forward ممکن است commit ایجاد نکند مگر --no-ff استفاده شود

گزینه‌ها

  • --no-ff : ایجاد commit ادغام حتی اگر fast-forward ممکن باشد
  • --ff : اجازه fast-forward merge (پیش‌فرض)
  • --ff-only : فقط اگر fast-forward ممکن باشد ادغام انجام شود
  • --squash : ترکیب کامیت‌ها بدون commit
  • --commit / --no-commit : کنترل commit خودکار
  • --abort : لغو merge در حال اجرا
  • --edit / -e : ویرایش پیام commit ادغام
  • --strategy <strategy> : مشخص کردن استراتژی merge
  • -X <option> : ارسال گزینه به استراتژی merge (مثلاً ours, theirs)
  • --no-verify : رد کردن pre-merge hookها
  • --quiet / -q : کاهش خروجی

دقیقا چه می‌کند؟

دستور git merge برای ادغام تغییرات از یک شاخه به شاخه دیگر استفاده می‌شود. این دستور به‌طور معمول برای ترکیب شاخه‌های ویژگی به شاخه‌های اصلی یا توسعه استفاده می‌شود. commitهای merge به حفظ تاریخچه هر دو شاخه کمک می‌کنند و امکان دنبال کردن تغییرات را فراهم می‌کنند.

مقایسه با git rebase

مقایسه ویژگی‌ها
ویژگی git merge git rebase
هدف ادغام تغییرات از یک شاخه به شاخه دیگر، حفظ تاریخچه انتقال یا ترکیب commitها از یک شاخه به شاخه دیگر، بازنویسی تاریخچه
حفظ تاریخچه commit بله، ایجاد commit ادغام خیر، commitها دوباره اجرا می‌شوند و تاریخچه بازنویسی می‌شود
مدیریت تضادها تضادهای merge باید به‌صورت دستی حل شوند و commit ادغام ایجاد می‌شود تضادهای rebase باید به‌صورت دستی حل شوند، هیچ commit ادغامی ایجاد نمی‌شود
موارد استفاده وقتی می‌خواهید تاریخچه کامل شاخه‌ها را حفظ کنید و ببینید که چگونه از هم جدا شده‌اند وقتی می‌خواهید تاریخچه خطی ایجاد کنید و از commitهای merge جلوگیری کنید

اشتباهات رایج

  • فراموش کردن commit یا stash تغییرات قبل از merge، که ممکن است منجر به تضاد شود.
  • حل نکردن صحیح تضادهای merge، که ممکن است باعث از دست رفتن کار شود.
  • استفاده از fast-forward merge زمانی که به یک commit ادغام نیاز دارید تا تاریخچه شاخه‌ها حفظ شود.

بهترین شیوه‌ها

  • همیشه قبل از انجام merge تغییرات خود را commit یا stash کنید تا از تضاد جلوگیری شود.
  • اگر می‌خواهید تاریخچه هر دو شاخه را حفظ کنید، از --ff-only استفاده نکنید.
  • برای اطمینان از ایجاد commit ادغام حتی در مواقعی که merge fast-forward امکان‌پذیر است، از --no-ff استفاده کنید.
  • بعد از حل تضادهای merge، تغییرات خود را با دقت بازبینی کنید قبل از انجام commit.

محدودیت‌ها

  • شما نمی‌توانید merge انجام دهید اگر تغییرات ذخیره‌نشده‌ای وجود داشته باشد که با شاخه مورد نظر تضاد داشته باشد.
  • تضادهای merge باید به‌صورت دستی حل شوند که ممکن است گاهی در پروژه‌های بزرگ دشوار باشد.
  • استفاده از --ff اجازه می‌دهد که merge سریع انجام شود، اما ممکن است commit ادغام که برای مرجع در آینده مفید باشد را از دست بدهید.

نحوه استفاده

برای ادغام تغییرات از یک شاخه به شاخه دیگر از دستور git merge استفاده کنید. اگر می‌خواهید history شاخه‌ها را حفظ کنید و از commit ادغام اطمینان حاصل کنید، از --no-ff استفاده کنید.

  • git merge : ادغام شاخه مشخص‌شده به شاخه جاری
  • git merge --no-ff : اصرار به ایجاد commit ادغام حتی اگر merge امکان‌پذیر باشد
  • git merge --squash : ترکیب کامیت‌ها از شاخه بدون انجام commit
  • git merge --abort: لغو عملیات merge در صورت بروز تضاد یا وقفه در عملیات

نمای کلی

از git merge برای ادغام تغییرات از یک شاخه به شاخه دیگر استفاده می‌شود. این دستور به شما کمک می‌کند تا تاریخچه پروژه خود را مدیریت کرده و تضادها را دستی حل کنید. چه در یک تیم کار کنید یا با شاخه‌های خود سروکار داشته باشید، git merge ابزار اصلی برای به‌روز نگه‌داشتن مخزن شما است.