تخطَّ إلى المحتوى

٢١ يوليو ٢٠٢٦

الفرق بين Git Fetch و Pull بالعربي

شارك المقال:

كل مطوّر جديد بيسمع "اعمل git pull" ويستخدمها يوميًا بدون ما يسأل شو فيه غيرها. لكن Git عنده أمر تاني قريب منها بالاسم — git fetch — وفهم الفرق بينهم بيوفّر عليك مفاجآت كتيرة، خصوصًا بمشاريع الفريق.

شو بيعمل git fetch؟

git fetch بينزّل كل التحديثات الجديدة من المستودع البعيد (commits، فروع، وسوم) — بس بدون ما يلمس فرعك الحالي أو ملفّاتك بشي:

git fetch origin

النتيجة: Git بيحدّث نسخته المحلية من الفروع البعيدة (زي origin/main)، لكن فرعك main المحلي يضل بالضبط متل ما كان. تقدر تراجع شو تغيّر براحتك:

git log main..origin/main       # شو الـ commits الجديدة يلي عالريموت؟
git diff main origin/main       # شو تغيّر بالضبط؟

شو بيعمل git pull؟

git pull بالضبط نفس git fetch، بس بيضيف خطوة تانية فورًا: يدمج التحديثات بفرعك الحالي — افتراضيًا عبر git merge (أو git rebase مع --rebase):

git pull origin main
# = git fetch origin  +  git merge origin/main

النتيجة: فرعك المحلي بيصير محدّث فورًا بآخر شي عالريموت، بدون ما تحتاج تعمل الدمج يدويًا.

جدول مقارنة سريع

المعيارfetchpull
بينزّل التحديثات؟نعمنعم
بيدمجها بفرعك تلقائيًا؟لانعم
بيلمس ملفّات مجلد شغلك؟لا أبدًانعم، فورًا
احتمال ظهور conflict فوري؟لانعم
الأنسب لـمراجعة قبل الدمجتحديث سريع وواثق

أيّهم تختار؟

  • fetch: لو بدك تشوف شو تغيّر عند زملائك قبل ما تدمجه بشغلك — خصوصًا لو عم تشتغل بنفس الوقت على نفس الملفّات وبدك تتجنب مفاجآت.
  • pull: للتحديث اليومي السريع لما تكون واثق إنه ما رح يصير تعارض كبير — أشيك أمر تبلّش فيه الصباح قبل ما تبلّش شغلك.

نصيحة عملية

لو بتفضّل تاريخ خطّي نظيف بدل commit دمج بكل مرة، فعّل pull يستخدم rebase تلقائيًا:

git config pull.rebase true

هيك git pull بيعمل fetch ثم rebase بدل merge — نفس فكرة الدرس عن rebase مقابل merge، بس مطبّقة تلقائيًا كل مرة تسحب فيها تحديثات.

الخلاصة

fetch هو الخيار "الآمن" — ينزّل وبس، وما بيغيّر إشي عندك. pull هو الخيار "السريع" — ينزّل ويدمج بخطوة وحدة. مافي وحدة أفضل مطلقًا؛ استخدم fetch لما بدك تراجع، وpull لما بدك تتحرّك بسرعة.

ابدأ مسار Git الكامل بالعربي — من الأساسيات لحد العمل مع المستودعات البعيدة بعمق.

📚 مصادر رسمية للتعمّق: التوثيق الرسمي لـ Git

الأسئلة الشائعة

إذا pull بيعمل نفس شغلة fetch، ليش ما نستخدم pull دائمًا؟

لأن pull بيدمج فورًا وبشكل تلقائي، وهاد معناه إذا كان فيه تعارض (conflict) رح يظهر لك مباشرة بمنتصف شغلك. fetch بيعطيك فرصة تشوف شو تغيّر عالريموت بهدوء (بـ git log أو git diff) قبل ما تقرر تدمجه، خصوصًا بمشروع فيه فريق كبير وتغييرات كتيرة.

شو يصير لفرعي الحالي لما أعمل git fetch؟

ولا شي. fetch بس بيحدّث نسخة Git المحلية من الفرع البعيد (اسمها origin/main مثلًا) بدون ما يلمس فرعك main أو ملفّاتك عالإطلاق. تقدر تعمل fetch مية مرة باليوم وما رح يتغيّر إشي بمجلد شغلك.

بعد git fetch، كيف أدمج التحديثات يدويًا؟

أبسط طريقة: git merge origin/main (أو أي اسم فرع بعيد نزّلته). هاي بالضبط الخطوة يلي pull بيعملها تلقائيًا نيابة عنك — بس هون أنت بتقرر التوقيت بعد ما تراجع التغييرات.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.