Git Pull: الحفاظ على تحديث مستودعك المحلي

إذا كنت تعمل في فريق أو حتى إذا كنت تعمل بمفردك على مشروع متطور، فإنك تعرف مدى أهمية الاحتفاظ بمستودعك المحلي محدثًا وذلك يعتبر أمرًا أساسيًا للتعاون السلس، وهنا تأتي أهمية git pull حيث يدمج التغييرات البعيدة في فرعك المحلي. بشكل أساسي، يقوم git pull بجلب ودمج التغييرات من مستودع بعيد إلى فرعك المحلي. إنه أمر حاسم يضمن أنك تعمل دائمًا بأحدث الشفرات، خاصة في المشاريع التعاونية ذات الوتيرة السريعة.

ما يميز git pull هو أنه يجمع بين خطوتين: أولاً، يقوم بعملية git fetch لتحميل أحدث التغييرات، ثم يقوم تلقائيًا بتشغيل git merge لدمج تلك التحديثات في فرعك. إذا كنت تفضل تاريخًا نظيفًا بدون مدمجات إضافية، يمكنك استخدام git pull --rebase بدلاً من ذلك.

إذا كنت تبحث عن فهم قوي لهذه المفاهيم، تأكد من التحقق من مسار المهارات الجديد GitHub Fundamentals لدينا. من خلال العمل على الدورة، ستتعرف على تاريخ الإصدارات والعمل مع الفروع، ولكن أيضًا، بحلول النهاية، ستعرف حتى عن استراتيجيات الدمج المتقدمة وإدارة المستودع.

ما هو Git Pull؟

لنقم بتفكيكه. عند تشغيل git pull، تقوم بتحديث فرعك المحلي بأحدث التعهدات من المستودع البعيد. إليك كيف يعمل:

  1. جلب التحديثات: يبدأ Git بتشغيل git fetch لاسترداد جميع التعهدات الجديدة من البعيد.

  2. دمج التغييرات: بعد ذلك، يقوم تلقائيًا بتنفيذ git merge لدمج تلك الcommits المُسترجعة في فرعك الحالي.

  

ها هي التمثيل المرئي لعملية Git Pull. يظهر الرسم البياني كيف يتم جلب ودمج الاقتراحات من مستودع البيانات البعيد (أ → ب → ج) إلى الفرع المحلي (أ → ب → د). الخط المتقطع يمثل خطوة الدمج، حيث يتم دمج الاقتراح ج في مستودعك المحلي. يوضح هذا كيفية حفظ الفرع المحلي محدثًا مع آخر التغييرات البعيدة.

دعنا نستكشف بعض الخيارات الأساسية المتاحة مع git pull ونرى كيف يمكن أن تجعل سير عملك أكثر سلاسة. سواء كنت تبحث عن تنظيف تاريخ اقتراحاتك أو تحتاج إلى مزيد من الرؤية حول ما يحدث أثناء السحب، فقد غطت هذه الأوامر احتياجاتك. إليك مرجع مفيد:

Command Description
git pull يجلب التغييرات من البعيد ويدمجها في الفرع الحالي.
git pull origin <branch> يجلب التغييرات من فرع بعينه في البعيد.
git pull --rebase يستخدم إعادة التمهيد بدلاً من الدمج لإنتاج تاريخ اقتراحات نظيف وخطي.
git pull --no-commit

يجلب التغييرات من البعيد ويدمجها ولكن لا ينشئ اقتراحًا تلقائيًا، مما يتيح لك تفقد وتعديل النتيجة المدمجة قبل التأكيد.

git pull --verbose يوفر إخراجًا مفصلاً خلال عملية السحب، مما يساعدك على رؤية التغييرات التي تم جلبها بدقة.

تقدم هذه الخيارات مرونة بحيث يمكنك تخصيص عملية التحديث وفقًا لاحتياجات مشروعك. على سبيل المثال، إذا كنت تفضل تاريخ التزام أكثر ترتيبًا، فإن git pull --rebase قد يكون الخيار المناسب لك. أو إذا كنت ترغب في التحقق من التغييرات قبل الدمج، فإن git pull --no-commit يمنحك تلك الطبقة الإضافية من التحكم.

تجنب مشكلات Git Pull الشائعة

لنكن صادقين: git pull هو منقذ، ولكن ليس بدون عيوبه. إليك كيفية التنقل في أشهر الفخاخ والحفاظ على سير العمل لديك سلسًا:  

تعارضات الدمج

تحدث تعارضات الدمج عندما تتداخل تغييراتك المحلية مع تغييرات من المستودع البعيد. على سبيل المثال، إذا قمت أنت وزميل لك بتحرير نفس سطر الكود، فلن يعرف Git أي إصدار يحتفظ به. عندما يحدث ذلك، يتوقف Git عن الدمج ويطلب منك حل التعارض يدويًا.  

إليك كيفية إصلاحه: 

  1. افتح الملف(ات) المتعارض(ة) وابحث عن علامات التعارض (<<<<<<<, =======, >>>>>>>).  

  2. حرر الملف للاحتفاظ بالتغييرات المطلوبة. 

  3. احفظ الملف، وقم بتهيئته (git add <file>)، وأكمل الدمج (git commit).

سحب مع تغييرات غير مؤمنة

إذا كان لديك تغييرات غير ملتزمة في دليل العمل الخاص بك، قد يفشل git pull لأنه يحتاج إلى بيئة نظيفة لدمج التغييرات البعيدة.  

إليك الحل:

1. خزّن تغييراتك:

نظرًا لأن git pull يتطلب دليل عمل نظيف، ستحتاج إلى حفظ تغييراتك غير الملتزمة مؤقتًا باستخدام أمر التخزين. هذا يحافظ على تغييراتك آمنة أثناء تحديث فرعك.

git stash

2. اسحب أحدث التغييرات:

الآن بعد أن أصبح دليل العمل الخاص بك نظيفًا، يمكنك بأمان جلب ودمج أحدث التغييرات من المستودع البعيد.

git pull

3. أعد تطبيق تغييراتك المخزنة:

بمجرد اكتمال التحديث، يمكنك استعادة التغييرات المحفوظة الخاصة بك إلى دليل العمل الخاص بك باستخدام git stash pop. سيقوم هذا بإعادة كل شيء كان لديك قبل الإخفاء.

git stash pop

من خلال اتباع هذه الخطوات، يمكنك التأكد من أن التغييرات المحلية الخاصة بك محفوظة بأمان أثناء تحديث فرعك.

سحب من الفرع الخطأ

إذا قمت بتشغيل الأمر git pull دون تحديد فرع محدد، يقوم Git بسحب التغييرات من الفرع المحلي الذي يتتبعه الفرع الخاص بك. إذا لم يتم ضبط الفرع الأصلي بشكل صحيح، قد تقوم بسحب التغييرات من فرع غير متوقع، مما يؤدي إلى الارتباك أو الأخطاء.

إليك كيفية تجنب ذلك:

1. تحقق من الفرع الأصلي:

git branch -vv

2. إذا لزم الأمر، ضبط الفرع الأصلي الصحيح:

git branch --set-upstream-to=origin/<branch>

تحقق دائمًا من الفرع الذي تقوم بسحب التغييرات منه، خاصة عند العمل مع عدة فروع.

أفضل الممارسات لاستخدام الأمر Git Pull

بناءً على ما ناقشنا سابقًا حول تجنب المشاكل الشائعة، إليك بعض الممارسات الجيدة لمساعدتك على استخدام git pull بشكل أفضل في سير عملك اليومي:

  • اسحب بانتظام: قم بتحديث فرعك بانتظام لتجنب تراكم الصراعات الكبيرة. التغييرات الصغيرة والتدريجية أسهل بكثير في الإدارة من دمجات ضخمة في وقت لاحق.

  • تفقد قبل الدمج: قم بتشغيل git fetch أولاً لرؤية التغييرات التي تنتظرك. يتيح لك هذا مراجعة الاستدخالات الواردة دون دمجها مباشرة، مما يمنحك وقتًا للتحضير لأي تعديلات.

  • الحفاظ على تاريخ خطي: إذا كنت تفضل تاريخ commmit نظيفًا، استخدم git pull --rebase. هذا الأمر يعيد قاعدة تغييراتك المحلية على رأس آخر commmits في الخادم، مما يحافظ على ترتيب تاريخ مشروعك.

  • مراجعة الاندماجات: للحذر الزائد، استخدم git pull—- no-commit لفحص نتائج الدمج قبل تثبيتها بواسطة commit. سيتم اكتشاف أي تناقضات مبكرًا بهذه الطريقة.

  • التحقق من تتبع الفروع: قم دائمًا بتشغيل git remote show origin للتأكد من أن الفرع المحلي يتتبع الفرع البعيد الصحيح. هذا الفحص البسيط يساعد في منع سحب التحديثات إلى الفرع الخطأ.

لماذا يتجنب بعض المطورين استخدام git pull

بينما git pull مريح، يفضل بعض المطورين تقسيم العملية إلى خطوتين للحصول على مزيد من التحكم:  

1. الاسترجاع أولا

git fetch

يسترجع هذا التغييرات البعيدة دون دمجها.  

2. الاندماج يدويًا

استخدم git merge لدمج التغييرات:  

git merge origin/<branch>

أو استخدم git rebase للحصول على سجل نظيف:  

git rebase origin/<branch>

النظر في مثال على استخدام Git Pull في العمل

دعنا نمر ببعض الأمثلة العملية على استخدام git pull حتى تتمكن من رؤية بدقة كيف تعمل هذه الأوامر في سيناريوهات حقيقية.

استخدام أساسي لأمر git pull

أمر git pull هو أسهل طريقة لتحديث فرعك المحلي بآخر التغييرات من الفرع الرئيسي لمستودع البيانات عن بُعد. يقوم تلقائيًا بإجراء git fetch تلاه git merge. استخدم هذا الأمر لمزامنة مستودعك المحلي مع أحدث التحديثات من البعيد دون خطوات إضافية. يقوم تشغيل git pull بجلب التحديثات من البعيد (المسمى عادةً origin) ويدمجها في فرعك الحالي، مضمنًا بقاء كودك المحلي محدثًا.

استخدام git pull –rebase

إذا كنت تفضل تاريخًا نظيفًا وخطيًا بدون دمج غير ضروري، git pull --rebase هو الطريقة المثلى. هذا الأمر يُحضر التغييرات البعيدة ثم يُعيد تطبيق التعديلات المحلية الخاصة بك فوقها، مما يحافظ على تاريخ التعديل المنظم. إنه مفيد في المشاريع التعاونية حيث يكون سجل التعديلات النظيف أمرًا أساسيًا. تشغيل git pull --rebase يضمن إعادة تشغيل تعديلاتك المحلية فوق التغييرات التي تم جلبها، مما يمنع الدمجات الزائدة ويحافظ على قابلية قراءة تاريخ المستودع الخاص بك أكثر.

استخدام git pull –no-commit

إذا كنت ترغب في جلب التغييرات البعيدة ودمجها ولكن تفضل مراجعتها قبل الالتزام، git pull--no-commit هو الخيار المثالي. يتيح لك هذا الأمر فحص نتائج الدمج يدويًا وحل أي تضاربات قبل إنهاء الالتزام. إنه يضمن أنك تمتلك التحكم الكامل في عملية الدمج، مما يجعله مثاليًا للتحديثات الحذرة حيث تحتاج إلى التحقق من التغييرات قبل الالتزام.

السحب من فرع بعينه على النظام البعيد

عند العمل على فروع متعددة ، قد تحتاج إلى تحديث فرعك المحلي بالتغييرات من فرع بعينه على الخادم البعيد بدلاً من الفرع الرئيسي الافتراضي. فرع git pull origin feature يتيح لك جلب ودمج أحدث الالتزامات من فرع محدد ، مما يضمن أن يبقى عملك المحلي محدثًا بآخر التغييرات البعيدة. هذا مفيد بشكل خاص عند التعاون على تطوير الميزات أو إصلاح الأخطاء عبر فروع مختلفة.

Git Pull vs. Git Fetch

عند العمل مع Git ، ستواجه في كثير من الأحيان git pull و git fetch. على الرغم من أنهما قد تبدوا متشابهين ، إلا أن لديهما أغراض متميزة. دعنا نفصل الاختلافات حتى تتمكن من تحديد متى يجب استخدام كل منهما.

فهم الاختلاف

  • git fetch يسترد التغييرات من مستودع بعيد ولكن لا يدمجها في فرع العمل الخاص بك. إنه يقوم بتحديث نسختك المحلية من الفروع البعيدة ببساطة.

  • git pull يفعل نفس عمل git fetch ولكن يدمج على الفور التغييرات المُحضرة في فرعك الحالي.

جدول المقارنة

Feature git fetch git pull
ماذا يفعل يُنزّل التغييرات الجديدة من بعيد ولكن لا يدمجها يُنزّل ويدمج التغييرات على الفور في الفرع الحالي
هل يغير دليل العمل؟ لا – يُحدث فروع تتبع البعيد نعم – يُعدِّل فرع العمل
الأفضل لـ التحقق من التغييرات البعيدة قبل الدمج تحديث الفرع المحلي بسرعة بآخر التعديلات
هل من الآمن استخدامه في أي وقت؟ نعم، حيث لا يؤثر على العمل المحلي لا، حيث قد يؤدي إلى تضاربات الدمج
حالة الاستخدام الشائعة فحص التعديلات البعيدة قبل اتخاذ قرار الدمج الحفاظ على تحديث الفروع المحلية تلقائيًا
بناء الجملة الأمرية git fetch origin git pull origin main

متى يجب استخدام كل منهما؟

استخدم git fetch لمراجعة التغييرات قبل تحديث فرعك، ودمجها يدويًا لاحقًا، أو تجنب سحب التغييرات غير المستقرة أثناء العمل على فرع الميزة. من ناحية أخرى، استخدم git pull عندما تحتاج إلى آخر التحديثات على فرع مشترك، مثل central أو develop، وتكون واثقًا من دمج التغييرات البعيدة دون تعارضات، أو ترغب في البقاء متزامنًا مع مستودع فريقك. العديد من المطورين الذين يفضلون مزيدًا من التحكم في التكاملات يستخدمون git fetch أولاً، تليه git merge أو rebase يدويًا. إذا كنت مهتمًا بسيناريوهات Git المتقدمة، فاستكشاف النهج المنظم يمكن أن يعزز استراتيجية التحكم في الإصدارات الخاصة بك.

الاستنتاج

حتى الآن، يجب أن تكون قد اكتسبت فهمًا قويًا لأمر git pull – كيف يعمل، متى يجب استخدامه، وأفضل الاستراتيجيات لتجنب الأخطاء الشائعة. لقد رأينا أن git pull يجمع بين git fetch و git merge، مما يجعله وسيلة سريعة لتحديث مستودعك المحلي. إذا كنت تفضل تاريخ commit أنظف، git pull --rebase هو بديل ممتاز.

استكشفنا أيضًا الخيارات الرئيسية مثل سحب من فروع محددة، تجنب التأكيدات الفورية، والتعامل مع تضاربات الدمج بفعالية. بالإضافة إلى ذلك، ناقشنا لماذا يختار بعض المطورين استخدام git fetch تليه بـ git merge للحصول على مزيد من السيطرة على التغييرات الواردة.

في نهاية اليوم، الحفاظ على سلاسة سير عمل Git الخاص بك يعتمد علىفهم كيفية تنقل التغييرات بين مستودعات البيانات المحلية والبعيدة. سواء كنت تتعاون في مشروع فريق أو تدير مستودعاتك، معرفة متى يجب سحب، جلب، دمج، أو إعادة القاعدة ستوفر لك الكثير من الصداع. هناك الكثير لتعلمه مع Git، ولكن هنا في DataCamp نحن هنا للمساعدة. أوصي بدورتناأسس Git ودورة مقدمة عن مفاهيم GitHub كخيارين رائعين.

Source:
https://www.datacamp.com/tutorial/git-pull