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

الدرس 18 · السجل والتكامل

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

ادمج ميزة بطاقات سير العمل مع تغييرات main المستقلة للإتاحة والتذييل. أثبت إيداع دمج حقيقيًا ذا أبوين وكامل الصفحة الناتجة.

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

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

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

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

ما ستتعلمه

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

قبل البدء

تبدأ من حيث انتهى الدرس السابع عشر: main بإيداع README لـ Maya، خالٍ؛ والميزة المنشورة feature/pricing-cards ما زالت F1 المتفرعة من H5. تحفظ MAIN_ACCESSIBLE وتودعه تهيئةً، فيصير لـ main وللميزة إيداعان مستقلان.

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

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

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

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

التباعد ليس مجرد اختلاف اسمين؛ لا يمكن تقديم أحد الطرفين مباشرةً إلى الآخر. يقارن Git تغييرات الطرفين بأساس مشترك.

يسجل إيداع الدمج أبوين مرتبين: طرف الفرع الحالي أولًا والوارد ثانيًا. تحتفظ إيداعات الميزة بهوياتها ويصلها إيداع جديد.

غياب التعارض النصي لا يثبت صحة المعنى. افحص الصفحة كاملة وشغّل الفحوص. لا يغير الدمج المحلي origin دون دفع مستقل.

تقدم التهيئة والدمج main وتحدّث الملفات؛ تبقى الميزة والوسم ومراجع origin كما كانت.

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

احفظ MAIN_ACCESSIBLE على main وأودعه بملخّص fix: make the main landmark focusable. لا تحفظ الناتج المدمج قبل عملية الدمج.

مدخلات الملفات كاملة

احفظ في المرحلة المحددة فقط بصيغة UTF-8 وLF وسطر نهائي. لا تلصق أسوار Markdown. ترث الملفات الثابتة نقطة البداية؛ لا تستبدل الأصل بنسخة إعادة منفصلة.

index.html — MAIN_ACCESSIBLE

مقتطف من ملف · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — MERGED

مقتطف من ملف · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

في GitTree

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

  1. عرض الملفات (Show Files) ← index.html؛ احفظ MAIN_ACCESSIBLE وراجع إضافة tabindex وحدها.
  2. عرض تغييرات مجلد العمل (Show Working Changes)، ثم تجهيز الملف (Stage File) على index.html وأودعه بالملخّص fix: make the main landmark focusable والخيارات العادية معطّلة.
  3. افحص نسب main والميزة وأبقِ main مسحوبًا.
  4. تحت محلي (Local) افتح المجلد feature وانقر pricing-cards بزر الفأرة الأيمن ← دمج feature/pricing-cards في main (Merge feature/pricing-cards into main)؛ يظهر حوار فيه طريقة التسجيل (Record it as).
  5. في طريقة التسجيل (Record it as) الخيارات: تقديم سريع إن أمكن، وإلا فإيداع دمج (Fast-forward if possible, else a merge commit)؛ وإيداع دمج دائمًا (Always a merge commit)؛ وتقديم سريع فقط (Fast-forward only)؛ وضمّ في التغييرات المُجهَّزة (بلا إيداع) (Squash into staged changes). اختر إيداع دمج دائمًا (Always a merge commit) واقرأ المعاينة؛ ألغِ عند مسارات غير متوقعة أو تعارضات.
  6. انقر دمج (Merge) مرة واحدة وانتظر الإتمام الفعلي دون استبداله بضم إلى الفهرس.
  7. افحص الأبوين وكامل الصفحة مقابل MERGED والتغييرات المستقلة الثلاثة.
  8. نفّذ الفحوص والخلو واترك الدمج محليًا دون دفع آلي.

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

في الطرفية

بعد حفظ MAIN_ACCESSIBLE، تهيئة الدمج ومساره الأصلي:

الأمر · bash
git add -- index.html
git commit --quiet -m "fix: make the main landmark focusable"
git branch course-before-merge
git merge --quiet --no-ff feature/pricing-cards --message "merge: combine workflow cards with accessibility"
git log -1 --format=%s
git rev-list --parents -n 1 HEAD
git status --short

الملخّص الفعلي:

الناتج
merge: combine workflow cards with accessibility

يعرض استعلام الآباء معرّف الدمج ثم أبوين حقيقيين؛ تتغير الهويات. طابق كامل HTML النص MERGED وكان العمل خاليًا. قد تختلف رسالة التطبيق التلقائية؛ اقبل الرسالة الفعلية مع النسب والمحتوى ولا تضع رسالة أصلي مزيفة فوقها.

الأمر · bash
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent build

نفّذ الفحوص على نقطة الدمج نفسها. لا يثبت المصدر وعدد الآباء نجاحها؛ تضم الحزمة 6 اختبارات. في نسخة تباعد منفصلة يجب أن يرفض ff-only بدل تغيير الوضع صامتًا.

النتيجة

حيث تنتهي: main عند M بأب أول طرفه المحضر وأب ثانٍ F1؛ الصفحة تجمع البطاقات وتذييل Leo وإتاحة main. العمل خالٍ دون دفع.

أخطاء شائعة

  • عكس اتجاه الدمج.
  • وصف الضم بأنه دمج ذو أبوين.
  • اعتبار المعاينة بلا تعارض إثبات معنى.

إن حدث خطأ

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

اختبر فهمك

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

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

    ما الذي يميز إيداع الدمج؟

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

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

    ما الدليل المطلوب؟

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

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

    ماذا يحدث لهوية F1؟

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

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

    اختر ff-only مع التباعد: النتيجة؟

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

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

    لا تعارض نصيًا؛ هل تُلغى الفحوص؟

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

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

    ما نطاق النهاية؟

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

0 من 6 صحيحة

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

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

تدريب

أثبت البايتات والأبوين وثبات F1. توقع رفض تقديم سريع فقط (Fast-forward only) في نسخة التباعد الأصلية واختبر منفصلًا.

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

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

خلاصة

  • التباعد علاقة نسب.
  • يحفظ الدمج الهويات القديمة.
  • يلزم فحص المحتوى والأبوين.

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

Merge — دمج; merge commit — إيداع دمج; common ancestor — سلف مشترك; first parent — الأب الأول.

نص الفيديو

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

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