انتقل إلى محتوى الدرس
الدرس 29
دورة Version Control

رفع الالتزامات والفروع عبر الأمر git pushGit Push

ارفع التزاماتك وفروعك المحلية إلى GitHub عبر الأمر git push -u origin، وعالج رفض الرفع غير المتزامن بأمان، وتعرّف على حذف الفروع البعيدة و--force-with-lease.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

إنشاء الالتزامات بالأمر git commit يحفظ اللقطات داخل قرصك المحلي فقط. ولنشر هذه الالتزامات إلى المستودع السحابي على GitHub، نستخدم الأمر git push <remote> <branch>. وفي المرة الأولى لرفع الفرع، نمرر الخيار -u أي --set-upstream ليقوم Git بربط فرعك المحلي بفرع التتبع البعيد، مما يتيح لك لاحقاً كتابة git push فقط دون تكرار اسم الرابط والفرع.

مخطط يوضح رفع الالتزامات وربط التتبع بـ git push -u ومعالجة رفض الرفع غير المتزامن وخيار --force-with-lease الآمن
Shell
# Publish local main branch and set upstream tracking (-u)
git push -u origin main
# Subsequent pushes on main only require:
git push

عندما تنشئ فرع ميزة جديداً على جهازك بالأمر git switch -c feature-login، يظل هذا الفرع محلياً بالكامل ولا يظهر على منصة GitHub إلا بعد رفعه صراحةً بالأمر git push -u origin feature-login.

Shell
git switch -c feature-login
git add .
git commit -m "Implement login form validation"
git push -u origin feature-login

إذا رفع أحد زملائك التزامات جديدة إلى الفرع البعيد أثناء عملك المحلي، فسيرفض Git أمر الرفع التالي برسالة التنبيه ! [rejected] main -> main (non-fast-forward). يمنع Git هذا الرفع لحماية التزامات زميلك من المسح؛ والخطوة الهندسية الصحيحة لمعالجته هي جلب تعديلات الخادم أولاً بالأمر git pull --rebase origin main ثم إعادة تنفيذ git push.

Shell
# Step 1: Integrate remote commits on top of local work
git pull --rebase origin main
# Step 2: Push the unified linear history cleanly
git push origin main

بعد اكتمال دمج فرع الميزة في الفرع الرئيسي main، يُنصح بحذف الفرع المنتهي من الخادم السحابي لمنع تكدس الفروع القديمة، وذلك عبر الأمر git push origin --delete <branch> متبوعاً بحذف النسخة المحلية بالأمر git branch -d <branch>.

Shell
# Delete merged feature-login branch from GitHub remote
git push origin --delete feature-login
# Delete local branch copy cleanly
git switch main
git branch -d feature-login

عندما تعدّل التزاماً بـ --amend أو تعيد بناء قاعدة فرعك الخاص بعد رفعه مسبقاً، تتغير بصمات الالتزامات ويرفض الخادم الرفع العادي. إياك واستخدام القوة العمياء git push --force على الفروع المشتركة لأنها تمسح عمل زملائك دون تحذير؛ واستخدم بدلاً منها في فرعك الشخصي الخيار الآمن git push --force-with-lease الذي يتحقق أولاً من عدم وجود أي التزامات جديدة غير مرئية على الخادم.

Shell
# Safely update your own rebased feature branch
git push --force-with-lease origin feature-auth
# Check branch tracking status
git branch -vv

يوضح الجدول الشامل التالي جميع صيغ وخيارات الأمر git push ومستوى الأمان الهندسي لكل منها:

الأمر والصيغةنطاق التأثيرالسلوك الأمنيالسيناريو الهندسي الموصى به
git push -u origin mainالفرع المحدديضبط ربط التتبع التلقائيأول عملية رفع للفرع الرئيسي أو فرع ميزة جديد
git pushالفرع المتتبعآمن (يرفض الكتابة فوق عمل الغير)النشر اليومي للالتزامات المحلية الجديدة
git push origin --delete <br>الفرع البعيديزيل مؤشر الفرع من السحابةتنظيف فروع الميزات بعد دمجها بنجاح
git push --force-with-leaseفرع الميزةيتوقف فوراً إذا وُجدت التزامات غير مجلوبةتحديث فرعك الخاص بعد التعديل أو إعادة القاعدة
git push --forceتاريخ الفرع البعيدخطير جداً (يمسح الالتزامات البعيدة قسرياً)يُتجنب تماماً على الفروع المشتركة والفرع الرئيسي
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس نشر الالتزامات والفروع الجديدة عبر git push -u، ومعالجة رفض الرفع غير المتزامن بـ git pull --rebase، وحذف الفروع البعيدة المنتهية بـ --delete، واستخدام البديل الآمن --force-with-lease. الخطوة التالية: انتقل الآن إلى الوحدة السابعة والدرس 30 «نسخ المشاريع Fork والمساهمة في المصادر المفتوحة» لاحتراف آليات العمل الجماعي على GitHub.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 git push أمر الرفع git push
الأمر المسؤول عن رفع الالتزامات ومراجع الفروع المحلية ونشرها إلى المستودع البعيد.
للمراجعة
02 Upstream Tracking (-u) ربط التتبع -u / --set-upstream
خيار يربط الفرع المحلي بنظيره على الخادم البعيد أثناء أول عملية رفع لتسهيل المزامنة اللاحقة.
للمراجعة
03 Non-Fast-Forward Rejection رفض الرفع غير المتزامن
حاجز أمان يمنع رفع التزاماتك إذا كان الفرع البعيد يحتوي على التزامات جديدة لزملائك لم تجلبها بعد.
للمراجعة
04 --force-with-lease الرفع المشروط --force-with-lease
بديل آمن للرفع القسري يشترط عدم وجود أي التزامات جديدة على الخادم لم يطلع عليها مستودعك المحلي.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 FF FF
Fast-Forward
تقدم مباشر لمؤشر الفرع البعيد عندما يكون تاريخك المحلي شاملاً لكل التزامات الخادم.
للمراجعة
02 PR PR
Pull Request
طلب سحب ومراجعة كود يُفتح على GitHub عقب رفع فرع الميزة.
للمراجعة
03 SSH SSH
Secure Shell
البروتوكول المشفر المستخدم لتوثيق عمليات الرفع السحابي بأمان.
للمراجعة
04 CLI CLI
Command-Line Interface
بيئة سطر الأوامر التي توفر خيارات الرفع الدقيق والفحص.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ فرعاً جديداً بـ git switch -c feature-login واحفظ التزاماً ثم ارفعه مع ربط التتبع بالأمر git push -u origin feature-login.

  2. استعرض التبويبات الثلاثة في المختبر التفاعلي لملاحظة خطوات علاج رفض الرفع وحذف الفروع البعيدة.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما وظيفة الخيار "-u" ("--set-upstream") في الأمر "git push -u origin main"؟

يرفع الفرع ويربطه بفرع التتبع البعيد origin/main بحيث تكفي كتابة git push أو git pull لاحقاً.

02

لماذا يرفض Git عملية الرفع برسالة الخطأ "! [rejected] main -> main (non-fast-forward)"؟

لأن الفرع البعيد يحتوي على التزامات جديدة رفعها عضو آخر في الفريق ولم تقم بجلبها ودمجها محلياً بعد.

03

ما الإجراء الهندسي الصحيح لمعالجة رفض الرفع (non-fast-forward) على فرع مشترك؟

نفّذ git pull --rebase لجلب ودمج تحديثات الخادم محلياً ثم أعد تنفيذ git push بأمان.

04

بمجرد إنشاء فرع محلي جديد بالأمر "git switch -c feature-nav"، يظهر الفرع تلقائياً على GitHub دون الحاجة لتنفيذ "git push".

خطأ؛ فالفروع المحلية تبقى داخل جهازك فقط حتى ترفعها صراحةً بالأمر git push.

05

أي أمر يحذف الفرع البعيد "feature-login" من منصة GitHub بعد الانتهاء من دمجه؟

يحذف الأمر git push origin --delete feature-login الفرع المحدد من الخادم البعيد.

06

لماذا يُعد الخيار "git push --force-with-lease" أكثر أماناً بكثير من "git push --force"؟

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

07

قد يؤدي تنفيذ "git push --force" على الفرع المشترك "main" إلى مسح التزامات زملائك على الخادم البعيد.

صواب؛ فالرفع القسري على الفروع المشتركة يستبدل سجل الخادم ويمسح التزامات الآخرين.

08

أي أمر يعرض الفروع المحلية مع فروع التتبع البعيدة المرتبطة بها وعدد الالتزامات المتقدمة أو المتأخرة؟

يعرض الأمر git branch -vv تفاصيل كل فرع محلي مع مؤشر التتبع البعيد المرتبط به.

09

بعد تعديل التزام مرفوع مسبقاً باستخدام "git commit --amend" على فرعك الشخصي، لماذا يفشل أمر "git push" العادي؟

لأن التعديل بـ --amend ينشئ التزاماً ببصمة SHA-1 جديدة مختلفة عن البصمة الموجودة على الخادم البعيد.

10

تظل الالتزامات المنشأة بالأمر "git commit" محلية على جهازك فقط حتى تنفذ الأمر "git push".

صواب؛ لأن Git نظام موزع يفصل بين الحفظ المحلي في القرص وبين النشر الشبكي إلى السحابة.