محتويات الدورة

Git وGitHub / الأساسي: نموذج Git المحلي / الدرس 2

شجرة العمل والفهرس والإيداع المقصود

اضبط المحتوى الداخل للقطة التالية وافحص التغييرات المرحّلة وغير المرحّلة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح شجرة العمل والفهرس ولقطة HEAD.
  • رحّل وافحص وأزل الترحيل دون إتلاف العمل.

افصل ثلاث صور للملف المتتبع

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

راقب الترحيل كلقطة

في مختبر يحوي إيداع notes.txt الأول، استبدل الملف ورحله ثم عدله. يحتفظ الفهرس بالنسخة الوسطى وتحوي الشجرة الأحدث. تقرأ صيغة النقطتين مع git show محتوى الفهرس. يوضح ذلك الفرق دون ألوان طرفية معينة. يغير المثال ملفاً اصطناعياً فقط. افحص الحالة واحمِ العمل غير المرتبط في المشروع الفعلي قبل تحديث الفهرس أو الشجرة.

bash قراءة المحتوى المختار للإيداع التالي
printf 'draft one\n' > notes.txt
git add -- notes.txt
printf 'draft two\n' > notes.txt
git show :notes.txt
الناتج المتوقع
draft one

بعد الإعداد يكون محتوى الفهرس draft one رغم وجود draft two في الملف. يضم الإيداع بهذه اللحظة draft one. المخرج محتوى لا تنبؤ ببيانات إيداع مولدة.

اختر المقارنة المقصودة

يقارن git diff افتراضياً العمل بالفهرس، ويقارن --cached الفهرس بـ HEAD، ويقارن git diff HEAD العمل بالإيداع للمتتبع. تجيب أسئلة مختلفة. استخدم -- قبل المسار لفصل الوسائط. لا يثبت فراغ الفرق غير المرحل نظافة المستودع فقد تبقى تغييرات مرحلة وملفات غير متتبعة. اجمع الحالة والمقارنتين وراجع الرقعة كاملة بما فيها الحذف والتوليد والمحتوى الخاص.

أزل الترحيل دون محو التعديل

لملف متتبع وHEAD قائم يعيد git restore --staged الفهرس للمصدر الذي يكون HEAD افتراضياً بهذا النمط ويترك ملف العمل. يختلف عن استعادة الشجرة التي قد تمحو التعديل وتحتاج قراراً آخر. يعيد المثال notes.txt لتعديل غير مرحل فقط. لا تعامل كل صيغ restore أو reset كتراجع واحد؛ اقرأ الوجهة والمصدر وميّز الفهرس من الشجرة.

bash إزالة ترحيل ملف مختبر متتبع
git restore --staged -- notes.txt
git diff --cached --name-only
git diff --name-only

بعد المثال السابق تكون قائمة المرحل فارغة وتحتوي غير المرحلة notes.txt ويبقى draft two. لا يستخدم الأمر هنا لمستودع بلا أول إيداع حيث يغيب HEAD.

ابنِ الإيداع كتفسير

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

الأخطاء الشائعة وإصلاحها

يحذف الإيداع التعديل الأحدث

لماذا يحدث؟
عُدل الملف بعد ترحيله.
كيف تصلحه؟
راجع الفرق غير المرحل ورحل النهائي المقصود.
كيف تتجنب تكراره؟
افحص git diff --cached قبل الإيداع.

يُفهم الفرق الفارغ كنظافة المستودع

لماذا يحدث؟
قورنت الشجرة بالفهرس فقط.
كيف تصلحه؟
افحص الحالة والمرحل وغير المتتبع.
كيف تتجنب تكراره؟
سمّ الحالتين المقارنتين.

لا توقف قاعدة التجاهل تتبع ملف

لماذا يحدث؟
الملف موجود بالفهرس بالفعل.
كيف تصلحه؟
خطط تغيير التتبع وراجع انكشاف البيانات مستقلاً.
كيف تتجنب تكراره؟
أضف التجاهل المناسب قبل الترحيل الأول.

اختبر فهمك

1. رُحل ملف وعُدل ثم أُودع. أي نسخة تدخل؟

اعرض الحل المشروح

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

2. تنجح الاختبارات بإصلاح غير مرحل واللقطة ناقصة. كيف تتحسن المراجعة؟

اعرض الحل المشروح

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

أهم ما تعلمته

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

المراجع الرسمية