دریافت و ادغام تغییرات از مخزن ریموت

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

            

استفاده

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

مثال‌ها

git pull origin                      # Pull changes from origin
git pull --rebase                     # Rebase instead of merge
git pull --all                        # Pull from all remotes
git pull origin develop               # Pull a specific branch
git pull --verbose                    # Show detailed output

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

دستور git pull برای دریافت تغییرات از مخزن ریموت و ادغام خودکار آن‌ها با شاخه فعلی استفاده می‌شود. این دستور در واقع ترکیبی از دو دستور git fetch و git merge است که باعث می‌شود به‌طور سریع تغییرات ریموت را به شاخه محلی خود منتقل کنید. همچنین می‌توانید رفتار ادغام را کنترل کنید (مثلاً استفاده از rebase به‌جای merge).

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

  • به‌روزرسانی شاخه محلی با تغییرات جدید از مخزن ریموت.
  • ادغام تغییرات با شاخه فعلی برای همکاری با دیگران.
  • استفاده از --rebase برای حفظ تاریخچه خطی با rebase کردن کامیت‌های محلی به‌روی تغییرات دریافت‌شده.
  • دریافت تغییرات از چندین مخزن با استفاده از --all.

محدودیت‌ها

  • تغییرات را به‌صورت خودکار به شاخه فعلی ادغام می‌کند که ممکن است باعث بروز تضاد (conflict) شود.
  • نیاز به دسترسی به شبکه برای ارتباط با مخزن ریموت دارد.
  • دریافت از مخازن خصوصی بدون احراز هویت امکان‌پذیر نیست.
  • در صورت بروز تضاد، نیاز به حل دستی خواهد بود.

مقایسه با `git fetch`

در حالی که هر دو دستور git pull و git fetch تغییرات را از مخزن ریموت دریافت می‌کنند، تفاوت اصلی در این است که git pull تغییرات را به‌طور خودکار به شاخه محلی شما ادغام می‌کند، در حالی که git fetch فقط تغییرات را دریافت می‌کند بدون اینکه چیزی در دایرکتوری کاری شما تغییر کند. این امر باعث می‌شود که git pull سریع‌تر و راحت‌تر باشد، اما خطر تضادهایی را که نیاز به حل دستی دارند به همراه دارد.

گزینه‌ها

  • --rebase : استفاده از rebase به‌جای merge برای ادغام تغییرات
  • --no-rebase : غیرفعال کردن rebase و انجام یک merge عادی
  • --all : دریافت از همه مخازن
  • --verbose / -v : نمایش جزئیات
  • --quiet / -q : مخفی کردن خروجی
  • --ff-only : فقط انجام fast-forward merge
  • --no-ff : ایجاد یک merge commit حتی در صورت امکان fast-forward
  • --commit : ایجاد merge commit (رفتار پیش‌فرض)
  • --no-commit : انجام merge بدون commit
  • : مشخص کردن نام ریموت (پیش‌فرض 'origin')
  • : مشخص کردن شاخه‌ای که می‌خواهید دریافت کنید

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

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

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

  • قبل از انجام git pull تغییرات محلی خود را commit یا stash نکرده‌اید، که باعث بروز تضاد می‌شود.
  • قبل از pull کردن تغییرات جدید، تضادهای احتمالی را بررسی نکرده‌اید.
  • از git pull در حالی که git fetch گزینه بهتری است استفاده می‌کنید، زیرا git fetch

نمای کلی

در نهایت، git pull یک دستور قدرتمند است که به شما این امکان را می‌دهد که به‌طور سریع و کارآمد شاخه محلی خود را به‌روزرسانی کنید. اما باید از محدودیت‌های آن و احتمال بروز تضاد آگاه باشید و از آن با احتیاط استفاده کنید، مخصوصاً در شرایط همکاری تیمی که ممکن است تغییرات زیاد و پیچیده‌ای به‌وجود آید.