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

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

أنشئ فرع الميزة واحذف المرجع التجريبي وحده

أضف بطاقات سير العمل على feature/pricing-cards مع بقاء main كما هو. أعد تسمية فرع مؤقت ولا تحذفه إلا بعد إثبات وصول main إلى إيداعه.

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

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

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

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

ما الذي ستتعلمه

  • فصل إنشاء اسم الفرع عن التبديل إليه.
  • إيداع قسم الميزة دون تحريك main.
  • إعادة تسمية مرجع مؤقت وحذفه دون اختلاق دمج.
  • التمييز بين حماية الحذف الأصلية وحذف GitTree المحمي.

قبل البدء

تبدأ من حيث انتهى الدرس الثامن: على main خمسة إيداعات موثقة، والعمل والفهرس دون فروق، وCSS-02-WORKING مُودَع، ولا بعيد. يبقى dist مُتجاهَلًا. سُجّل الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04: أُنشئت الفروع وأُعيدت تسميتها وحُذفت وبُدّل بينها في التطبيق، وحُفظ الملف وأُودع فيه، وجرت فحوص الطرفية على ما أنشأه التطبيق أو على نسخ منفصلة لحالتي الإنشاء فقط وإعادة التسمية. لم يُنفَّذ شيء على macOS أو Windows، وUbuntu هو نظام Linux الوحيد المسجَّل. الحد الأدنى المقروء 2.39.0، والفروع المحلية بعد تسجيل الدخول ضمن الخطة المجانية ولا تحتاج مضيفًا أو Pro أو تجربة.

الخطوات المكتوبة تخص مشروع GitTree Features المعزول، لا إنشاء فروع في مستودع الويب الذي تُؤلَّف فيه الدورة.

الفكرة

الفرع اسم محلي متحرك يشير إلى إيداع، لا نسخة من كل الملفات. إنشاء الاسم وحده لا يحرك HEAD. يربط التبديل HEAD بالفرع ويحدّث الفهرس والعمل عند الحاجة. يحرك الإيداع اللاحق الفرع المسحوب وحده. مرجع الفروع، مرجع التبديل.

يبدأ main عند H5. يضيف الفرع المؤقت عنده اسمًا ثانيًا للدائرة نفسها لا إيداعًا جديدًا. تغير إعادة التسمية الاسم، ولا يزيل حذفه تاريخ main الذي يصل إلى الإيداع. يتقدم فرع الميزة لاحقًا إلى F1 بينما يبقى main عند H5. لا تتغير مراجع بعيدة.

يفحص git branch -d الاندماج، عادةً بالنسبة إلى الفرع المتتبَّع أو HEAD الحالي. يستخدم محوّل الحذف المحلي في GitTree الخيار -D بعد حفظ الطرف في مرجع الحفظ وسجل العملية؛ ليس له شرط الرفض نفسه. لا تفترض أن التطبيق سيرفض حذف فرع غير مدمج لأن الأمر الأصلي رفضه. نثبت وصول main إلى طرف الفرع المؤقت أولًا ونحتفظ بالميزة ولا نختار حذفًا بعيدًا.

ملف الميزة كاملًا

يتغير index.html وحده إلى HTML-03. تبقى أدوات المشروع والتاريخ وCSS كما تركها الدرس الثامن. اسم الفرع حرفي، لكن المحتوى لا يتضمن أسعارًا أو ترويجًا.

مقتطف من ملف · 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">
    <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.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

في GitTree

  1. تحقق من الأصل على main دون فروق. افتح لوحة الأوامر… (Command Palette…) بـ Command/Ctrl+Shift+P ← إنشاء فرع… (Create Branch…) (repo.branch.create). تظهر إنشاء فرع عند HEAD.
  2. اسم الفرع (Branch name) = practice/rename-me. ألغِ التبديل إلى الفرع الجديد (Check out the new branch)، ثم إنشاء فرع. يظهر الاسم عند الطرف نفسه ويبقى main مسحوبًا.
  3. انقر الفرع المؤقت بالزر الأيمن في القائمة المحلية ← إعادة تسمية practice/rename-me…. اجعل الاسم practice/renamed ثم إعادة تسمية. يختفي الاسم القديم دون تغيير الملفات.
  4. نفّذ فحص السلف أدناه، ثم انقر practice/renamed بالزر الأيمن ← حذف practice/renamed…. راجع حذف practice/renamed في gittree-features؟ وتأكد من نطاقه المحلي، ثم حذف practice/renamed. ألغِ عند اختلاف الاسم أو الطرف. حفظ الطرف قبل التعديل وعد من المصدر يحتاج إلى إثبات العملية في التسجيل، لا ادعاء استعادة بعيدة.
  5. أنشئ feature/pricing-cards من HEAD، وهذه المرة أبقِ التبديل إلى الفرع الجديد مفعّلًا. ينشئ الخيار الاسم ويبدل إليه، خلاف الخطوة 2.
  6. عرض الملفات (Show Files) بـ Command/Ctrl+Shift+E، ثم ركّز index.html وEnter. الصق HTML-03 كاملًا واحفظ. لا تضف dist.
  7. عد إلى الرسم وتغييرات العمل، وراجع index.html ثم تجهيز الملف (Stage File). الملخّص feat: add workflow cards والخيارات الإضافية معطلة. إيداع تغييرات ملف واحد (Commit Changes to 1 File) أو Command/Ctrl+Enter مرة.
  8. انقر main المحلي بالزر الأيمن ← التبديل إلى main. تظهر الشجرة الأقدم دون قسم بطاقات سير العمل. عد بالعملية نفسها إلى feature/pricing-cards فيعود القسم من شجرته المُودَعة.
  9. إن ظهرت نافذة تبديل مع عمل غير محفوظ فاختر إلغاء (Cancel) وافحص المحتوى. نقاط التبديل المحددة هنا خالية؛ لا تتخلّص من عمل لمطابقة اللقطة.
  10. اختم على الميزة: خمسة إيداعات في main وواحد إضافي للميزة. لا تدمجها أو تحذفها لتبسيط الرسم.

تحتاج إجراءات المرجع المسمى إلى سياق القائمة؛ ليست أوامر لوحة عامة دون وسيطات. إنشاء الفرع من HEAD أمر مستقل. لا نفترض اختصارًا مباشرًا غير مثبت.

في الطرفية

البديل الأصلي عند main الخالي، لا إعادة بعد نجاح التطبيق:

الأمر · bash
git branch practice/rename-me
git symbolic-ref --short HEAD
git branch -m practice/rename-me practice/renamed
git merge-base --is-ancestor practice/renamed main

نجحت أوامر الإنشاء وإعادة التسمية وفحص السلف دون ناتج، وطبع فحص HEAD:

الناتج
main

تثبت الحالة 0 من فحص السلف وصول main إلى الطرف. عند غير الصفر توقف ولا تستبدل الحذف بالقسر.

الأمر · bash
git branch --delete --quiet practice/renamed
git switch --quiet --create feature/pricing-cards

نجح الأمران بصمت. بعد حفظ HTML-03:

الأمر · bash
git add -- index.html
git commit --quiet -m "feat: add workflow cards"
git switch --quiet main

نجحت العمليات؛ لا يحرّك الرجوع إلى main مرجع الميزة.

رفض أصلي مقصود وأنت على main:

الأمر · bash
git -c advice.forceDeleteBranch=false branch -d feature/pricing-cards

stderr الفعلي مع الحالة 1:

الناتج
error: the branch 'feature/pricing-cards' is not fully merged

يبقى الفرع. لا تختبر هذا الرفض بحذف التطبيق؛ سياسته المحمية مختلفة، ولا تستبدل -d بـ -D لإجبار النجاح.

الأمر · bash
git switch --quiet feature/pricing-cards
git symbolic-ref --short HEAD
git branch --format='%(refname:short)'
git rev-list --count main..feature/pricing-cards
git log --format=%s main..feature/pricing-cards
git diff --name-only main feature/pricing-cards
git rev-list --count main
git status --short

بعد التبديل الصامت تظهر النتائج بالترتيب:

الناتج
feature/pricing-cards
feature/pricing-cards
main
1
feat: add workflow cards
index.html
5

لا تطبع الحالة النهائية شيئًا وتنجح. لا يوجد الاسمان المؤقتان ولا بعيد.

النتيجة

في نهاية هذا الدرس: الميزة مسحوبة ودون فروق، وإيداع واحد فوق main الذي بقي عند الخامس. لا أسعار أو دمج أو بعيد أو فرع منشور. حُذف المرجع المؤقت وحده.

أخطاء شائعة

  • عد أسماء الفروع إيداعات.
  • افتراض تحرك HEAD مع الإنشاء وحده.
  • إعادة تسمية فرع مستودع المصدر بدل فرع المثال.
  • افتراض مطابقة حماية التطبيق لشرط -d.
  • حذف الميزة المفيدة لمجرد تبسيط الرسم.

عند حدوث مشكلة

يُفترض بقاء النافذة والاسم عند رفض اسم غير صالح أو موجود. اقرأ السبب ولا تغير مرجعًا آخر لحل تشابه حالة الأحرف. إذا منع عمل محلي التبديل فألغِ واحتفظ به؛ يأتي الحفظ المؤقت لاحقًا. لا تحذف فرعًا مسحوبًا في مجلد عمل آخر.

رفض الحذف الأصلي حماية، ولقطة التطبيق آلية أخرى لا تلغي ضرورة فحص الوصول والطرف. اختفاء اسم من عرض مُرشَّح لا يثبت نجاح العملية.

اختبر فهمك

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

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

    كم تاريخًا جديدًا ينشئ مرجع آخر عند H5؟

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

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

    ما المطلوب قبل حذف المرجع المؤقت؟

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

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

    أودعت HTML-03 على الميزة من H5. أين main؟

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

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

    ألغيت التبديل عند الإنشاء وأنت على main. ماذا يتغير؟

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

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

    رفض -d الميزة غير المدمجة. هل يثبت رفض التطبيق؟

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

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

    ما الأدلة المطابقة للنهاية؟

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

0 من 6 صحيحة

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

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

تدريب

أثبت بقاء main والميزة متقدمة بإيداع واحد. إذا ألغيت خيار التبديل عند الإنشاء، فتوقّع بقاء HEAD على main حتى تبديل صريح. اختبر في نسخة منفصلة، واشرح لماذا لا يثبت رفض -d رفض التطبيق.

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

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

خلاصة

  • أسماء الفروع والإيداعات شيئان مختلفان.
  • الإنشاء وحده والإنشاء مع التبديل يختلفان في أثرهما على HEAD.
  • افحص النطاق والوصول؛ حذف التطبيق المحمي و-d آليتان مختلفتان.

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

Branch — فرع؛ switch — تبديل؛ ref — مرجع؛ reachable — قابل للوصول؛ upstream — فرع متتبَّع؛ working tree — مجلد العمل.

نص الفيديو

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

اعرض النص
  1. أنشئ فرع ميزة مع الحفاظ على main.
  2. لا ينشئ اسم فرع جديد إيداعًا.
  3. أنشئ الاسم المؤقت دون مغادرة main.
  4. تأكد من أن الإنشاء وحده لم يبدّل فرعك.
  5. أعد تسمية المرجع المؤقت، لا فرع مصدر الويب.
  6. افحص وصول main إلى الطرف المؤقت الحالي.
  7. احذف المرجع المؤقت المفحوص وحده.
  8. يختلف حذف GitTree المحمي عن رفض الحذف الأصلي الآمن.
  9. أنشئ الميزة وبدّل إليها هذه المرة.
  10. احفظ قسم سير العمل دون أسعار أو ترويج.
  11. راجع ملف الميزة المتغير وحده قبل الإيداع.
  12. أودِع على الميزة، لا على main.
  13. يتقدم الفرع المسحوب وحده بهذا الإيداع.
  14. يختار التبديل شجرة main المُودَعة.
  15. يرفض الحذف الأصلي الآمن فرع الميزة غير المدمج.
  16. لا يثبت هذا الرفض أن GitTree سيرفض الحذف نفسه.
  17. عد إلى محتوى الملفات المسجل على الميزة.
  18. تحقّق من إيداع ميزة واحد وتغير index.html وحده.
  19. ما زال main يضم خمسة إيداعات والميزة دون فروق.
  20. عند تعطيل التبديل يوجد الاسم ويبقى HEAD على main.
  21. ألغِ تبديلًا غير متوقع مع تعديلات وافحص العمل أولًا.
  22. الطرف المحلي المحمي ليس وعدًا باستعادة بعيدة.
  23. احتفظ بالميزة وتحقق من غياب الاسمين المؤقتين.
  24. يقدّم الدرس التالي البعيد؛ لم نحتج إليه هنا.