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

الدرس 13 · العمل اليومي

ادفع الإيداعات وانشر فرعًا

انشر الفرع المقصود إلى الوجهة المجردة دون الكتابة فوق main الأحدث عند Leo. قدّم main المتأخر صراحةً، ثم انشر الميزة مع علاقة تتبُّع مستقلة.

حُفظ التقدّم في هذا المتصفح.

يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).

تعليق صوتي بالإنجليزية · ترجمة إنجليزية وعربية

افتح صفحة الفيديوشاهد على YouTube

ما ستتعلمه

  • افحص المصدر والوجهة قبل الدفع.
  • قدّم الفرع المتأخر وحده دون إيداع دمج.
  • انشر ميزة مسماة وأثبت متتبَّعها.
  • ميّز رفض الدفع من فقد العمل.

قبل البدء

تبدأ من حيث انتهى الدرس الحادي عشر: main/H6 مسحوب، وorigin/main والخادم H7 بتذييل Leo؛ العمل خالٍ والعدّ 0/1. الميزة F1 محلية دون متتبَّع.

سُجّل الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04: التقديم السريع والدفعان والمتتبَّع جرت في التطبيق؛ أما فحوص ما قبل وما بعد والدفع المرفوض ففي الطرفية. لم يُشغَّل شيء على macOS أو Windows، وUbuntu هو نظام Linux الوحيد المسجَّل. الحد الأدنى المقروء لـ GitTree هو Git 2.39.0.

يطلب GitTree تسجيل الدخول، ثم تشمل الخطة المجانية كل خطوات الدرس. لا مزوّد أو Pro أو اعتماد API أو خدمة إنترنت مطلوبة. الوجهة المحلية المجردة ليست GitLab أو CI. الهويات خيالية example.com؛ لا تنفذ الدرس في مستودع مصدر.

نفّذ التغييرات عبر التطبيق أو الطريق الأصلي من الحالة نفسها، لا كليهما بالتتابع. يمكن التحقق بالقراءة بعد أيهما. تُسمَّى التهيئة الطرفية أصلية، لا ميزة تطبيق مختلقة.

الفكرة وأثر الأفعال

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

ينحدر H7 من main/H6؛ يمكن تقديم main إليه دون إيداع دمج. هذا تقديم مشروط بالنسب، أما دمج التباعد فلدرسين لاحقين في الدورة.

يرسل نشر الميزة F1 إلى فرع جديد في الخادم، ولا يختار هذا الدفع في GitTree المتتبَّع: تعيّنه بعد ذلك من صف الفرع نفسه، دون تبديل الفرع الحالي أو دمج البطاقات في main. لا ينشئ دفع main الموافق أصلًا إيداعًا في الخادم.

يغيّر التقديم الصريح main وHEAD والفهرس والعمل إلى H7. يغيّر الدفع المرجع المختار وإعداد التتبُّع بعد النجاح ولا يحفظ نصًا غير مجهز. يجب الاحتفاظ بإيداع Leo.

إعداد حالة المشروع المحددة

استخدم أصل الدرس الحادي عشر مع تعطيل الجلب الخلفي. لا ملف أو دفتر إضافيًا. رفض main المتأخر في تسجيل أصلي منفصل، لا طلب ضغط الدفع القسري في التطبيق.

في GitTree

لوحة الأوامر: Command+Shift+P (وCtrl+Shift+P على Ubuntu)، ثم الأمر المحدد حرفيًا. أفعال المرجع المسمّى في قائمة صفه، لا اختصار لوحة بلا وسيط.

  1. على main افحص المصدر والوجهة والعدّ 0/1؛ لا تدفع main الأقدم في المسار المحدد.
  2. في مجموعة بعيد (Remote) بالشريط الجانبي انقر origin/main بزر الفأرة الأيمن ← دمج origin/main في main (Merge origin/main into main). في طريقة التسجيل (Record it as) اختر تقديم سريع فقط (Fast-forward only) ثم دمج (Merge). المتوقع: main عند H7 مع تذييل Leo، بأب واحد وخط مستقيم في المخطط.
  3. نفّذ فحوص النسب والخلو أدناه؛ إن تباعد main فاختر إلغاء (Cancel) بدل أي وضع يعيد الكتابة.
  4. انقر دفع (Push) في الشريط على main. يقرأ الإشعار «كل شيء محدَّث بالفعل.» (Everything was already up to date.): هذا توافق قائم لا إيداع جديد.
  5. تحت محلي (Local) افتح المجلد feature وانقر pricing-cards بزر الفأرة الأيمن ← دفع feature/pricing-cards (Push feature/pricing-cards). مع مستودع بعيد واحد لا يظهر حوار: يقرأ الإشعار «دُفع feature/pricing-cards إلى origin/feature/pricing-cards.» (Pushed feature/pricing-cards to origin/feature/pricing-cards.).
  6. الدفع لم يعيّن فرعًا متتبَّعًا (لم يكن للفرع واحد). انقر الصف نفسه بزر الفأرة الأيمن ← الفرع المتتبَّع (Upstream) ← تعيين الفرع المتتبَّع… (Set Upstream…)، وفي ماذا يتتبّع feature/pricing-cards؟ (What should feature/pricing-cards track?) اختر origin/feature/pricing-cards ثم تتبُّع (Track). تحقق من F1 على الخادم ومن الفرع المتتبَّع.
  7. حدّد تسميتي main والميزة في المخطط دون تبديل؛ تأكد أنهما ما زالتا طرفين مختلفين وأنه لم يظهر دمج.
  8. اترك main محدَّدًا وخاليًا بعد التحقق من فرعي الخادم المسمّيين. لا تنقر دفع قسري… (Force Push…) ولا تنشر كل المراجع.

لكل إيداع عادي: الملخّص (Summary) بالملخّص المحدد والوصف (Description) خالٍ؛ خيارات تعديل الإيداع الأخير (Amend Previous Commit) وتخطّي الخطّافات (Skip Hooks) وإضافة Signed-off-by (Add Signed-off-by) ومؤلف مختلف (Different Author) والدفع بعد الإيداع (Push After Commit) والسماح بإيداع فارغ (Allow Empty Commit) معطلة ودون مؤلفين مشاركين. جهّز الملفات المحددة ثم زر الإيداع ذي العدد الصحيح مرة واحدة، أو Command+Enter كبديل. درس التعديل الأخير وحده يغير خياره الصريح.

في الطرفية

من أصل المشروع التعليمي، البديل الأصلي:

الأمر · bash
git rev-list --left-right --count main...origin/main
git merge --ff-only --quiet origin/main
git push --quiet origin main
git push --quiet --set-upstream origin feature/pricing-cards
git rev-list --left-right --count main...origin/main
git rev-parse --abbrev-ref 'feature/pricing-cards@{upstream}'
git symbolic-ref --short HEAD
git status --short

العدّ الأول 0/1. نجح التقديم والدفعان المحددان بخروج 0. نواتج التحقق النهائية بالترتيب:

الناتج
0	0
origin/feature/pricing-cards
main

الحالة القصيرة خالية. قارن معرّفي main والميزة محليًا وفي الوجهة مستقلين عبر git ls-remote --heads origin؛ تتغير SHAs الفعلية حسب البيانات. في نسخة منفصلة قبل التقديم، خرج دفع main القديم 1 بهذا المقتطف الحقيقي:

الناتج
 ! [rejected]        main -> main (non-fast-forward)

يشمل التشخيص الكامل عنوان file الفعلي وتلميحات Git. لم يتحرك مرجع الوجهة عند الرفض؛ لا تختلق العنوان أو تعالج الحالة بالقوة.

النتيجة

حيث تنتهي: main قُدِّم إلى H7 وبقي مسحوبًا وخاليًا؛ main الخادم ثابت. نُشرت F1 باسم origin/feature/pricing-cards وصارت تتتبَّعه دون دمجها مع main.

أخطاء شائعة

  • دفع main الحالي بدل الميزة المسماة.
  • اعتبار رفض التأخر تفويضًا للكتابة فوق Leo.
  • افتراض أن تعيين متتبَّع الميزة دمجها.

إن حدث خطأ

بعد الرفض اجلب وافحص النسب والوجهة قبل الإعادة. لهذه الحالة وحدها استخدم التقديم الصريح؛ لا تراجع تطبيق عامًا عن الدفع البعيد.

اختبر فهمك

أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.

  1. السؤال 1 من 6

    ماذا يفعل نشر F1؟

    اختر إجابة واحدة.

  2. السؤال 2 من 6

    ما الصحيح بعد النجاح؟

    اختر كل إجابة صحيحة.

  3. السؤال 3 من 6
    مطلوب

    تقديم H6 إلى تابعه H7: هل يوجد إيداع دمج؟

    اختر إجابة واحدة.

  4. السؤال 4 من 6
    مطلوب

    ادفع H6 القديم قبل التوافق.

    اختر إجابة واحدة.

  5. السؤال 5 من 6

    الدفع موافق أصلًا؛ هل نُشرت F1؟

    اختر إجابة واحدة.

  6. السؤال 6 من 6
    مطلوب

    ما دليل النهاية؟

    اختر كل إجابة صحيحة.

0 من 6 صحيحة

أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.

جرى التحقق في هذا المتصفح.

تدريب

أثبت توافق main والخادم وتوافق F1 ومتتبَّع الميزة وخلو main. في نسخة طرف قديم منفصلة اختبر الرفض دون فقد H7.

تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.

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

خلاصة

  • افحص الوجهة المحددة.
  • قدّم التابع صراحةً عند التأخر وحده.
  • انشر فرعًا دون دمجه.

المصطلحات الجديدة

Push — دفع; publish branch — نشر فرع; upstream — الفرع المتتبَّع; fast-forward — تقديم سريع.

نص الفيديو

ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.

اعرض النص
  1. ابدأ من نقطة الحالة المحددة.
  2. سمِّ الفرع ونسخة الفهرس ونسخة العمل.
  3. أعدّ نسخة الدورة المعزولة وحدها.
  4. افحص المصدر والوجهة المحددين.
  5. قدّم فقط عندما يسمح النسب.
  6. توقّف إن تباعد الفرعان فعليًا.
  7. يتفق main مع الوجهة الآن.
  8. انشر الميزة المسماة، لا كل الفروع.
  9. تحقّق من متتبَّع الميزة الخاص.
  10. لا يدمج النشر الميزة.
  11. اترك main الأصلي خاليًا.
  12. ماذا يفعل نشر F1؟
  13. يرسل المرجع المسمّى لا كل ملفات العمل.
  14. ما الصحيح بعد النجاح؟
  15. كان دفعه متوافقًا أصلًا.
  16. تقديم H6 إلى تابعه H7: هل يوجد إيداع دمج؟
  17. يتحرك المرجع إلى تابع موجود.
  18. ادفع H6 القديم قبل التوافق.
  19. خرج الفحص 1 وحافظ على H7.
  20. الدفع موافق أصلًا؛ هل نُشرت F1؟
  21. نتيجة main لا تثبت مرجعًا آخر.
  22. ما دليل النهاية؟
  23. قارن SHA كل فرع.
  24. تحقّق من النتيجة الفعلية، لا رسالة وحدها.
  25. توقّع نتيجة المُدخل المختلف قبل الفعل.
  26. احتفظ بالعمل المفيد قبل الاستعادة.
  27. أثبت نقطة الحالة قبل المتابعة.
  28. احتفظ بالنتيجة المتحققة للخطوة التالية.