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

الدرس 3 · الأساسيات

توقّع ما سيحفظه إيداعك المقبل

افصل بين الملف الذي تحرّره، والنسخة التي جهّزتها، والتاريخ المسجّل. نعاين مثال واجهة GitTree Features لنفهم كيف يظهر الملف نفسه مُجهَّزًا ومعدّلًا في الوقت ذاته.

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

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

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

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

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

  • التمييز بين مجلد العمل والفهرس وآخر إيداع.
  • توقّع أثر التجهيز والتحرير والإيداع العادي.
  • قراءة عمودي الحالة المختصرة دون اعتبار التجهيز حفظًا نهائيًا.
  • فحص التغييرات المُجهَّزة وغير المُجهَّزة بمقارنتين منفصلتين.

قبل البدء

أكمل الدرس الأول أولًا؛ ويهيّئ الدرس الثاني Git وهوية الإيداع. تبدأ دون مستودع للدورة وتنتهي دون مستودع، فهذا درس مفاهيمي. أول إنشاء عملي داخل GitTree في الدرس الرابع.

نعاين هنا حالات ستنفّذها بنفسك في الدرس الخامس. نتائج الطرفية ولقطات GitTree في الفيديو مأخوذة من نسخة مؤقتة معزولة من المشروع المستقبلي: فُحصت الأوامر باستخدام Git 2.52.0، وسُجّلت الأوامر واللقطات في GitTree 2.0 على Ubuntu 24.04. ولم تُنفَّذ على macOS. كل مشهد من هذا النوع في الفيديو يحمل وسم «Future lesson 5 preview». لا تنفّذ استعلامات الحالة المستقبلية داخل مستودع عمل آخر، ولا تنشئ مستودع تدريب إضافيًا الآن؛ شاهد المثال واقرأه ثم أعد الفحص حين يصل الدرس الخامس إلى هذه الحالات.

الحد الأدنى المقروء لـ GitTree هو Git 2.39.0. على macOS اضغط Command حيث يستخدم Windows وLinux مفتاح Ctrl. لم تُنفَّذ الأوامر على Windows. لا يحتاج هذا النموذج المحلي إلى مزوّد أو حساب أو Pro أو تجربة.

الفكرة: ثلاث نسخ، لا ملف ينتقل بين صناديق

مجلد العمل هو ملفات المشروع على القرص. تعديل الملف وحفظه يغيّران بايتاته، لكن ذلك لا يعني اختيارها للإيداع.

الفهرس، أو منطقة التجهيز، يصف النسخة التي تعدّها للإيداع المقبل. تجهيز الملف يحدّث مدخله في الفهرس وفق محتواه حينها؛ لا يربطه تلقائيًا بكل تحرير لاحق.

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

يمكن تشبيه ذلك بمسودة تعمل عليها، ونسخة جاهزة للمراجعة، ونسخة مسجلة. لكن التجهيز لا ينقل ملف العمل ولا يحذفه. يمكن أن تتطابق النسخ الثلاث أو تختلف.

نقصد هنا إيداع الفهرس العادي، دون -a أو مسارات ملفات صريحة أو تجهيز تلقائي أو تعديل الإيداع السابق. ليست كل طرق الإيداع متكافئة مع هذا المثال. راجع سلوك التجهيز ومقارنات الفروق.

المثال المستقبلي المحدد

الملف هو index.html، ويظل عنوانه Understand every change. يتغير السطر الداعم من:

مقتطف من ملف · html
<p id="hero-copy">A clear view of Git history.</p>

إلى:

مقتطف من ملف · html
<p id="hero-copy">Choose one change, then check what Git saved.</p>

هذان مقتطفان من الصفحة الأصلية والصفحة المعدَّلة الكاملتين في المشروع، لا ملفان بديلان تلصقهما فوق الصفحة كلها.

الحالة المستقبليةآخر إيداعالفهرسملف العملالحالة المختصرة
A: إنشاء الملفاتلا يوجدلا مدخلالصفحة الأصلية?? index.html
B: تجهيز ملفات المثاللا يوجدالصفحة الأصليةالصفحة الأصليةA index.html
C: تحرير بعد التجهيزلا يوجدالصفحة الأصليةالصفحة المعدَّلةAM index.html
D: إيداع الفهرسالصفحة الأصليةالصفحة الأصليةالصفحة المعدَّلة M index.html

يتضمن المشروع الكامل ملف README أيضًا، ويُجهَّز الملفان قبل الإيداع الأول. لكن استعلامات الحالة هنا مقيدة بـ index.html. في D يكون README دون تغييرات، ويحتفظ index.html بالتحرير المقصود غير المُجهَّز.

في الصفوف العادية غير المتعارضة هنا يقارن العمود الأول الفهرس بـ HEAD، ويقارن الثاني ملف العمل بالفهرس. العلامة ?? حالة خاصة لملف غير مُتتبَّع، وليست تعديلين عاديين. وللمسافة قبل M في الحالة الأخيرة معنى.

ما الذي يتغير؟

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

الفهرس ليس مجرد قائمة أسماء. قد يحتفظ بمراحل متعددة أثناء تعارض متقدم؛ نموذجنا يقتصر على ملفات عادية في المرحلة 0.

في الطرفية — معاينة نقطة مستقبلية

لا تشغّل هذه الأوامر في مشروع المتعلم غير المنشأ بعد. شُغّلت في نسخة مؤقتة تضم ملف README الكامل ونسختي الصفحة. ستنفّذ الإنشاء والتجهيز في الدرس الخامس.

عند الحالة C

الأمر · bash
git status --short -- index.html

الناتج المرصود:

الناتج
AM index.html

اقرأ النسخة المُجهَّزة مباشرة:

الأمر · bash
git show :index.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>
</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">Understand every change.</h1>
      <p id="hero-copy">A clear view of Git history.</p>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>

قارن ملف العمل بالفهرس:

الأمر · bash
git diff -- index.html

الناتج:

الناتج
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
     <section class="hero" aria-labelledby="hero-title">
       <p class="eyebrow">GitTree Learn demo project</p>
       <h1 id="hero-title">Understand every change.</h1>
-      <p id="hero-copy">A clear view of Git history.</p>
+      <p id="hero-copy">Choose one change, then check what Git saved.</p>
     </section>
   </main>
   <footer><p>Built by a fictional team for GitTree Learn.</p></footer>

اختصارات الكائنات أعلاه ناتجة عن محتوى الملفين الفعلي بنهايات LF، وليست معرّفات إيداع مختلقة. قد يختلف طول الاختصار أو تنسيق العرض بحسب إعداداتك.

قارن الإضافة المُجهَّزة بالتاريخ الخالي قبل أول إيداع:

الأمر · bash
git diff --cached --stat -- index.html

الناتج:

الناتج
 index.html | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

يعرض --stat ملخصًا لا مراجعة المحتوى. النسخة الكاملة المقصودة هي ما عرضه git show :index.html.

عند الحالة D

بعد الإيداع العادي في الدرس الخامس:

الأمر · bash
git log -1 --format=%s
git status --short -- index.html
git diff --cached -- index.html

نتيجة الأمرين الأولين بالترتيب:

الناتج
feat: add the GitTree Features hero
 M index.html

لا يطبع الأمر الثالث شيئًا وينتهي بنجاح؛ يتطابق الفهرس وHEAD لهذا المسار. لا يعني ذلك أن مجلد العمل بلا تغييرات؛ يظل فرق السطر الداعم ظاهرًا بالمقارنة العادية. هكذا قد يكون غياب أحدث تحرير من الإيداع سلوكًا صحيحًا لا عطلًا.

في GitTree

في سياقك الحالي دون مستودع

  1. أبقِ علامة تبويب جديدة (New Tab) مفتوحة، أو افتحها بـ Command+T أو Ctrl+T، والأمر tab.new.
  2. افتح دليل الميزات (Feature Guide) بـ Option+H على macOS أو Alt+H على غيره. أو افتح لوحة الأوامر… (Command Palette…) بـ Command+Shift+P أو Ctrl+Shift+P واختر دليل الميزات (Feature Guide) في الواجهة الإنجليزية.
  3. في الميزات ابحث عن stage داخل البحث في الميزات (Search features) في اللقطة الإنجليزية، واقرأ بطاقة التجهيز والإيداع (Stage and commit). هذه معاينة وصفية وليست دليلًا على تجهيز ملف.
  4. اضغط Escape لإغلاق الدليل دون إنشاء المستودع.

الحالات نفسها في GitTree (تظهر في الفيديو)

يفتح الفيديو نسخة مؤقتة من المشروع المستقبلي في GitTree، وتحمل وسم «Future lesson 5 preview». ليست هذه نسخة مشروعك ولا تسجيلًا لعملك.

  1. عند C افتح لوحة الأوامر…، وابحث عن عرض تغييرات مجلد العمل (Show Working Changes) واختره في اللقطة الإنجليزية؛ مقابله العربي عرض تغييرات مجلد العمل (Show Working Changes) (wip.show). لا نفترض اختصارًا افتراضيًا له.
  2. افحص الملفات غير المُجهَّزة (Unstaged Files) والملفات المُجهَّزة (Staged Files) في الجانب الأيمن. يظهر index.html في القائمتين لأن له مقارنتين مختلفتين، لا لأنه ملفان على القرص.
  3. انقر صفه ضمن غير المُجهَّزة. يعرض الوسط تحوّل الصفحة الأصلية إلى الصفحة المعدَّلة.
  4. انقر صفه ضمن المُجهَّزة. تظهر إضافة الصفحة بالسطر الداعم الأقدم. قراءة الصف لا تجهّز الملف ولا تلغي تجهيزه.
  5. عند D بعد الإيداع العادي يظهر أول إيداع في الرسم، وتعرض قائمة المُجهَّزة: لا شيء مُجهَّز. لا يحتوي الإيداع إلا على التغييرات المُجهَّزة. ويبقى التحرير تحت غير المُجهَّزة.
  6. لا تستخدم أزرار تجهيز الملف (Stage File) أو إلغاء تجهيز الملف (Unstage File) أو تجهيز كل التغييرات (Stage All Changes) أو التخلّص من التغييرات… (Discard Changes…) في هذه المعاينة؛ يأتي التطبيق العملي في الدرسين الرابع والخامس.

النتيجة

تستطيع توقّع D انطلاقًا من C: يسجّل الإيداع السطر الأقدم وتبقى أحدث نسخة في مجلد العمل فقط. أما مشروعك فيظل دون مستودع. الرسم المستقبلي معاينة موسومة، لا دليلًا على إتمامك العمل.

أخطاء شائعة

  • كل تحرير لاحق يدخل تلقائيًا بعد التجهيز: التجهيز يلتقط محتوى محددًا عند تنفيذه.
  • غياب الفرق المُجهَّز يعني غياب التحرير: لا بد من فحص فرق مجلد العمل أيضًا.
  • ظهور المسار مرتين يعني نسختين على القرص: هما مقارنتان للمسار نفسه.
  • التجهيز نسخة احتياطية دائمة: الفهرس قابل للتغيير وليس تاريخًا مسجلًا.
  • الإيداع يحدّث المضيف: لا يوجد بعيد ولا دفع في هذا المثال.

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

رسالة عدم وجود مستودع الآن متوقعة إذا جرّبت استعلامًا يحتاج إليه. اقرأ المعاينة دون إنشاء مستودع ثانٍ.

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

نستعيد الفهم هنا باختيار المقارنة الصحيحة لا بإزالة المحتوى. يعرض الدرس الخامس قرارات التجهيز الفعلية، ثم ندرس التراجع وسجل المراجع مع نطاقهما. لقطات GitTree المحفوظة لا تضمن استعادة كل حفظ يجريه أي محرر.

اختبر فهمك

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

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

    أين توجد النسخة التي يقرأها الإيداع العادي هنا؟

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

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

    عند C، ما الذي تغيّر بسبب التحرير اللاحق للتجهيز؟

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

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

    عند C، أودِع الفهرس دون إعادة تجهيز. أي سطر يُسجّل؟

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

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

    ابدأ من C، ثم جهّز النسخة المعدّلة قبل الإيداع. ماذا يختلف؟

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

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

    عند D لا يطبع git diff --cached -- index.html شيئًا، لكن الحالة هي مسافة ثم M. ماذا يعني ذلك؟

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

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

    نفّذ التسلسل A ثم B ثم C ثم الإيداع العادي للفهرس. ما الأدلة الصحيحة؟

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

0 من 6 صحيحة

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

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

تدريب

قبل الدرس الخامس توقّع على الورق: جهّز ملفًا، ثم عدّله بعد التجهيز، ثم أودِع إيداعًا عاديًا. أي سطر داعم يُسجَّل، وأين يبقى التحرير اللاحق؟ ثم غيّر التسلسل: جهّز الملف المعدَّل مرة أخرى قبل الإيداع. ينبغي الآن أن يكون السطر المُسجَّل هو الأحدث، وألا يبقى فرق في مجلد العمل. يعرض الفيديو المسارين بنتائج حقيقية، وستتحقق منهما بنفسك في الدرس الخامس.

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

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

خلاصة

  • مجلد العمل والفهرس والتاريخ المسجّل نسخ مختلفة.
  • لا يحدّث التحرير اللاحق النسخة المُجهَّزة تلقائيًا.
  • افحص المقارنتين ولا تخلط الإيداع المحلي بتحديث البعيد.

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

Working tree — مجلد العمل؛ staging area / index — منطقة التجهيز / الفهرس؛ commit — إيداع؛ ref — مرجع؛ untracked — غير مُتتبَّع؛ staged — مُجهَّز. يظل HEAD معرّفًا تقنيًا لاتينيًا.

نص الفيديو

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

اعرض النص
  1. توقّع محتوى الإيداع بفصل ملفات العمل والفهرس والتاريخ.
  2. هذه معاينة مستقبلية؛ لم ننشئ مستودعك بعد.
  3. نستخدم ثلاث نسخ معنونة، لا ملفًا ينتقل بين صناديق.
  4. يضم مجلد العمل الملفات التي تحرّرها وتحفظها على القرص.
  5. يصف الفهرس النسخة التي تعدّها للإيداع.
  6. يسجّل الإيداع نسخة وبيانات وعلاقتها بالتاريخ السابق.
  7. قبل أول إيداع، للفرع اسم دون إيداع عند طرفه.
  8. يختار التجهيز المحتوى الحالي دون نقل الملف أو تتبع تحرير لاحق.
  9. تبدأ الواجهة المستقبلية بهذا السطر الداعم.
  10. في A يوجد الملف في مجلد العمل فقط وهو غير مُتتبَّع.
  11. جهّز ملفات المثال؛ يحمل الفهرس الآن الواجهة الأصلية.
  12. حرّر بعد التجهيز؛ يتغيّر ملف العمل ويبقى الفهرس أقدم.
  13. دون تجهيز جديد، أي سطر سيسجله الإيداع العادي؟
  14. يسجّل السطر المُجهَّز، لا تحرير العمل اللاحق.
  15. تعرض الحالة المختصرة مقارنتين مختلفتين للمسار نفسه.
  16. هنا A إضافة مُجهَّزة، وM تعديل لاحق في مجلد العمل.
  17. اقرأ الملف المُجهَّز مباشرةً من الفهرس.
  18. ما زال الفهرس يحتوي السطر الداعم الأقدم.
  19. يقارن الفرق العادي ملف العمل بنسخته المُجهَّزة.
  20. قبل أول إيداع، يصف الملخص المُجهَّز الملف الجديد المُضاف.
  21. نفحص الحالة نفسها الآن في تسجيل GitTree فعلي.
  22. افتح عرض تغييرات مجلد العمل من لوحة الأوامر.
  23. يعرض صف غير المُجهَّزة تحرير العمل الأحدث مقارنةً بالفهرس.
  24. يعرض صف المُجهَّزة الملف الأقدم المعدّ لأول إيداع.
  25. قد يظهر مسار واحد في القائمتين دون إنشاء ملفين فعليين.
  26. قراءة أي مقارنة لا تجهّز المحتوى ولا تلغي تجهيزه أو تزيله.
  27. يسجّل الإيداع العادي الفهرس ويحدّث الفرع المحلي.
  28. يؤكد عنوان الإيداع المسجّل وجود أول إيداع للواجهة.
  29. للمسافة الأولى معنى؛ لا يختلف إلا ملف العمل عن الفهرس.
  30. غياب الفرق المُجهَّز يعني تطابق الفهرس والتاريخ لهذا المسار.
  31. لا يزال فرق العمل يحمل التحرير الأحدث؛ لم يُفقد شيء.
  32. أصبح في التاريخ إيداع، وبقي تحرير العمل المقصود.
  33. غيّر التسلسل؛ جهّز الملف المعدّل قبل الإيداع.
  34. يُسجّل السطر الأحدث الآن، ولا يبقى فرق لهذا المسار.
  35. لا ترفع أي من هذه الخطوات المحلية شيئًا إلى مزوّد.
  36. ينتهي درسك دون مستودع؛ يأتي الإنشاء في الخطوة التالية.
  37. لا تتخلّص من الملفات ولا تضبط التاريخ لمطابقة المثال.
  38. قد تختلف ملفات العمل والمحتوى المُجهَّز والتاريخ المسجّل.
  39. اختبر التسلسلين واشرح عمودي الحالة.
  40. أنشئ GitTree Features داخل GitTree، ثم اختبر النموذج بنفسك.