الدفع — ما هو، كيف يعمل git push ومتى تحتاجه

المؤلف: IT Sectr نُشر: 2026-08-01 وقت القراءة: 6 دق

الدفع يعني إرسال الالتزامات المحلية إلى مستودع Git عن بُعد، مما يجعلها متاحة لأعضاء الفريق الآخرين. بعد الدفع، تظهر التغييرات على GitHub أو GitLab أو Bitbucket. وفقًا لـ GitHub Octoverse 2024، يتم دفع أكثر من 10 ملايين التزام يوميًا على المنصة. Git push هو إجراء رئيسي لمزامنة العمل في فريق موزع.

النقاط الرئيسية

  • الدفع — إرسال الالتزامات المحلية إلى مستودع عن بُعد
  • بعد الدفع تصبح التغييرات مرئية للفريق بأكمله
  • المنصات الرئيسية — GitHub و GitLab و Bitbucket
  • الدفع الآمن — فقط إلى الفروع الفرعية، وليس مباشرة إلى main
  • خطافات ما قبل الدفع — التحقق التلقائي من الكود قبل الإرسال

ما هو الدفع في Git

Git push هو أمر ينقل الالتزامات من مستودع محلي إلى مستودع عن بُعد. على عكس commit، الذي يحفظ التغييرات فقط على جهاز المطور المحلي، فإن الدفع ينشر هذه التغييرات للفريق بأكمله. Push هو خطوة إلزامية قبل إنشاء Pull Request والنشر.

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

bash
# ادفع إلى remote origin، فرع main
git push origin main

# ادفع الفرع الحالي إلى remote مع upstream
git push -u origin feature/new-dashboard

# ادفع جميع الفروع بأسماء متطابقة
git push --all origin

# الدفع القسري مع lease (دفع قسري آمن)
git push --force-with-lease

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

كيف يعمل git push

يقارن أمر git push الفروع المحلية والبعيدة وينقل فقط الالتزامات المفقودة. لا يعيد Git إرسال جميع الملفات — بل ينقل فقط الفرق، مما يجعل الدفع سريعًا حتى للمستودعات الكبيرة. بروتوكول Git يستخدم النقل الذكي، مما يقلل من حجم البيانات المنقولة.

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

الأمرالإجراءمتى تستخدمه
git pushدفع قياسي إلى الفرع المتتبعإرسال التغييرات العادي
git push -uدفع مع إعداد المنبعأول دفع لفرع جديد
git push --force-with-leaseدفع قسري آمنبعد إعادة تأسيس فرعك
git push --forceدفع إجباريفقط إذا كنت متأكدًا من عدم وجود تعارضات
git push --deleteحذف الفرع البعيدالتنظيف بعد دمج الفرع

فهم المستودعات البعيدة هو مفتاح الدفع الصحيح. عادةً ما يكون origin هو اسم المستودع البعيد الافتراضي. يعرض الأمر git remote -v قائمة المستودعات البعيدة وعناوين URL الخاصة بها. يمكنك إضافة عدة مستودعات بعيدة (مثل origin للمستودع الرئيسي و upstream للفork).

متى تحتاج إلى دفع التغييرات

القاعدة الرئيسية: ادفع بعد كل مرحلة مكتملة منطقيًا من العمل. إذا أنهى المطور مهمة أو جزءًا منها — فقد حان وقت الدفع. ومع ذلك، لا يُنصح بدفع عمل غير مكتمل يكسر البناء. بناء غير معطل هو الحد الأدنى من المتطلبات للدفع إلى أي فرع.

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

  • بعد إكمال مهمة — التزم وادفع الحل النهائي إلى الفرع الفرعي
  • قبل المغادرة — ادفع العمل غير المكتمل إلى فرع فرعي (ليس إلى main!)
  • قبل إنشاء PR — تأكد من دفع جميع الالتزامات وأنها متاحة للمراجعة
  • بعد إعادة التأسیس — ادفع باستخدام --force-with-lease إلى فرعك الفرعي

قواعد الدفع الآمن

الدفع الآمن هو مجموعة من القواعد التي تمنع فقدان البيانات والتعارضات في الفريق. القاعدة الأولى والأهم: لا تدفع أبدًا مباشرة إلى فرع main أو master إذا لم يكن المشروع يحتوي على نشر مباشر. في الفرق الحديثة، يتم تكوين حماية فرع main على مستوى حماية فرع GitHub.

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

القاعدة الثالثة: قم بإعداد خطافات ما قبل الدفع التي تشغل تلقائيًا الاختبارات وأدوات التحليل قبل الإرسال. إذا فشلت الاختبارات — يتم حظر الدفع. يتم تكوين هذه الخطافات عبر Husky أو خطافات Git (ملف pre-push في .git/hooks).

القاعدة الرابعة: لا تدفع ملفات ثنائية كبيرة. Git غير مصمم لتخزين القطع الأثرية الثنائية — فهي تضخم المستودع وتبطئ العمليات. للملفات الكبيرة، استخدم Git LFS (تخزين الملفات الكبيرة). إذا تم دفع ملف ثنائي بالفعل وهو في التاريخ، فيجب إزالته عبر git filter-branch.

ماذا تفعل إذا فشل الدفع

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

bash
# تم رفض الدفع — قم بـ fetch و rebase أولاً
git fetch origin
git rebase origin/main
# حل التعارضات، ثم:
git push --force-with-lease

# أو ببساطة ادمج التغييرات البعيدة
git pull origin main
git push

السبب الثاني — عدم وجود صلاحيات الكتابة على الفرع. إذا كان الفرع main محميًا بقواعد حماية الفرع، فإن الدفع المباشر محظور. الحل: ادفع إلى فرع فرعي وأنشئ Pull Request. يتم إدارة إعدادات الحماية عادةً عبر إعدادات GitHub أو الفروع المحمية في GitLab.

السبب الثالث — مشكلات المصادقة. بيانات الاعتماد القديمة، التبديل إلى SSH أو تغيير رمز الوصول الشخصي. الحل: تحقق من عنوان URL البعيد (git remote -v) وقم بتحديث بيانات الاعتماد. منذ عام 2021، أوقف GitHub المصادقة بكلمة المرور لـ HTTPS — استخدم رمزًا مميزًا شخصيًا أو مفتاح SSH.

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

ماذا يعني الدفع في Git؟

الدفع يعني إرسال الالتزامات المحلية من مستودع المطور إلى خادم بعيد (GitHub، GitLab). بعد الدفع، تصبح التغييرات متاحة للفريق، وتظهر في Pull Requests ويمكن نشرها. Push هو المرحلة النهائية من العمل المحلي على الكود قبل التعاون الجماعي.

ما الفرق بين الدفع وcommit؟

Commit يحفظ التغييرات محليًا، في مستودع المطور. Push يرسل تلك الالتزامات المحلية إلى خادم بعيد. يمكنك عمل العديد من الالتزامات بدون دفع، ولكن لكي يرى الزملاء التغييرات، تحتاج إلى الدفع. Commit هو حفظ، push هو نشر.

ماذا تفعل إذا تم رفض git push؟

يتم رفض الدفع إذا كان الفرع البعيد يحتوي على التزامات غير موجودة محليًا. الحل: قم بتشغيل git pull (أو git fetch + git rebase)، ادمج التغييرات وادفع مرة أخرى. إذا كنت تعمل في فرعك الفرعي الخاص وواثق من التغييرات، استخدم git push --force-with-lease.

هل يمكن التراجع عن دفع تم بالفعل؟

نعم، ولكن بحذر. استخدم git revert <commit-hash> — ينشئ التزامًا يعكس التغييرات. ثم ادفع الالتزام الجديد. إذا كنت بحاجة إلى إزالة التزامات من التاريخ، استخدم git reset + git push --force-with-lease، ولكن فقط في فرعك الفرعي الخاص. git revert هو الخيار الآمن للفروع المشتركة.

لماذا من المهم الدفع كل يوم؟

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

الملخص

  • الدفع — إرسال الالتزامات المحلية إلى مستودع بعيد للفريق
  • الفرق عن commit — commit يحفظ محليًا، push ينشر على الخادم
  • حماية main — ادفع فقط إلى الفروع الفرعية، إلى main عبر PR
  • الدفع القسري — استخدم فقط مع --force-with-lease في فروعك الخاصة
  • فحوصات ما قبل الدفع — الاختبارات وأدوات التحليل عبر خطافات Git أو Husky
  • التكرار — ادفع بعد كل تغيير مكتمل منطقيًا
  • المشكلات — إذا تم رفض الدفع، قم أولاً بـ pull أو rebase، ثم أعد المحاولة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا