الدرس 8 · العمل اليومي
اقرأ التاريخ دون تحريك HEAD
سجّل تحرير نصف القطر المتبقي، ووثّق السجل الفعلي، ثم افصل مجموعة الإيداعات عن فروق شجرتي الملفات. اختيار صف قديم في الرسم ليس تبديلًا للفرع.
- المستوى: مبتدئ
- قراءة 6 دقائق
- فيديو 4 دقائق
- آخر تحديث
- قبل هذا الدرس: جهّز النسخة المقصودة وأنشئ أول إيداع, أودِع الكتلة المقصودة لا الملف كله
حُفظ التقدّم في هذا المتصفح.
يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).
ما الذي ستتعلمه
- فصل HEAD عن الإيداع المحدد والمؤلف عن المُودِع.
- اتباع الإيداع الأب ومسار الأب الأول.
- تفسير النقطتين والثلاث دون خلط السجل بفروق الملفات.
- مقارنة إيداعين فعليين دون إعادة كتابة التاريخ.
قبل البدء
تبدأ من حيث انتهى الدرس السابع: على main ثلاثة إيداعات من الدروس من الخامس إلى السابع. بقي نصف قطر CSS وحده معدّلًا؛ يحمل HEAD والفهرس CSS-02-INDEX والعمل CSS-02-WORKING. لا بعيد. سُجّل الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04: جرى الإيداعان والوثيقة وفحص الرسم والبحث والانتقال إلى HEAD ومقارنة المراجع في التطبيق، وجرت فحوص الطرفية على ما أنشأه التطبيق، فأرقام الإيداعات المعروضة هي التي قارنها التطبيق. حالة الفرع المتباعد رسم توضيحي: لم يُنشأ فرع ميزة. لم يُنفَّذ شيء على macOS أو Windows، وUbuntu هو نظام Linux الوحيد المسجَّل. الحد الأدنى المقروء Git 2.39.0، والعمل المحلي بعد تسجيل الدخول ضمن الخطة المجانية.
الفكرة
يحفظ الإيداع شجرة وبيانات ومعرّفات الآباء. يشير الفرع إلى إيداع، ويشير HEAD عادةً إلى الفرع الحالي. نقر صف يغير تحديد التطبيق لا HEAD أو الفرع أو القرص. المؤلف كاتب العمل، والمُودِع من سجّله؛ يتطابقان بالهوية الخيالية هنا.
يتبع HEAD~1 خطوة عبر الأب الأول وHEAD~2 خطوتين. يعني HEAD^2 الأب الثاني لإيداع واحد، لا إيداعين إلى الخلف. لا أب ثانيًا لإيداع عادي غير دامج.
يعني git log A..B ما يمكن بلوغه من B باستثناء ما يمكن بلوغه من A. أما git log A...B فهو الفرق المتماثل بين مجموعتي الوصول. يقارن git diff A B شجرتي الطرفين، بينما يقارن git diff A...B أساس الدمج إلى B. لا تعني النقاط الثلاث السؤال نفسه في log وdiff. يتطابق بعض الناتج في السلسلة الخطية مصادفةً، لا قاعدةً للفروع المتباعدة. ترميز المراجعات، الفروق.
القراءة والبحث والتحديد لا تغير العمل أو الفهرس أو المراجع. لكن الإيداعين الصريحين هنا يحدّثان main: نصف القطر ثم التوثيق، دون بعيد.
وثيقة التاريخ كاملة
أودِع نصف القطر أولًا، ثم أنشئ docs/history.md بهذا النص الكامل بنهايات LF. يصف آخر بند الإيداع الذي سيحمل الوثيقة، لا SHA مختلقًا.
# GitTree Features history
The first-parent chain on main, oldest first:
1. feat: add the GitTree Features hero
2. feat: add styling and local project checks
3. feat: refine the hero and card spacing
4. style: finish the card radius change
5. docs: record logs-and-revisions practice
After this document is committed, HEAD names item 5.
HEAD~1 names item 4; HEAD~2 names item 3.
Selecting a graph row does not move HEAD.
These labels are descriptions, not fabricated commit SHAs.
All identities in this project are fictional.لا تُدخل دفترًا اختياريًا أو إيداعات إضافية في هذه السلسلة ذات الخمسة إيداعات.
في GitTree
- افتح لوحة الأوامر بـ Command/Ctrl+Shift+P ثم عرض تغييرات مجلد العمل (Show Working Changes). انقر styles.css، وتحقق من تغير نصف القطر وحده من 0.5rem إلى 0.75rem.
- تجهيز الملف (Stage File)، ثم الملخّص
style: finish the card radius change، والخيارات الإضافية معطلة، ثم إيداع تغييرات ملف واحد (Commit Changes to 1 File) أو Command/Ctrl+Enter مرة واحدة. أصبح العدد 4. - ملف جديد… (New File…) ← المسار docs/history.md ← إنشاء. الصق النص الكامل واحفظ. عد إلى الرسم وتغييرات العمل وجهّز هذا الملف وحده.
- الملخّص
docs: record logs-and-revisions practice، ثم إيداع ملف واحد. أصبح العدد 5. - انقر صف إيداع الواجهة الجذري. افحص معرّفه الحقيقي والملخّص والمؤلف والمُودِع وحالة إيداع جذري (root commit). انقر الأحدث وافحص علاقة الأب. لا تستخدم أمر التبديل إلى الإيداع لمجرد قراءته.
- فعّل عرض كل الملفات (View all files) في التفاصيل لتمييز شجرة الإيداع الكاملة من الملفات المتغيرة وحدها، وافحص الوثيقة في مراجعتها المسجلة دون تعديل العمل.
- عد إلى الرسم ثم البحث في السجل المحمَّل (Search Loaded History) أو Command/Ctrl+F مع نشاط الرسم، واكتب radius. داخل المحرّر يبحث الاختصار في النص بدل التاريخ. امسح البحث بعد الفحص؛ لا يمثل البحث كل سجل غير محمّل أو غير مجلوب.
- الانتقال إلى HEAD (Jump to HEAD)، Command/Ctrl+Shift+H، يحدد الطرف الحالي. يمكن أن يتغير التحديد مع بقاء HEAD على main.
- استخرج معرّف HEAD~2 الحقيقي بالأمر أدناه. افتح أمر مقارنة مرجعين… (Compare References…) في اللوحة (
repo.compareRefs). في الطرف الأقدم (Old side) الصق المعرّف المقاس واختر نتيجة الإيداع، وفي الطرف الأحدث (New side) اختر HEAD. لا نفترض أن المنتقي يقبل كل تعبير مراجعة مثل الطرفية. - في ما الذي يُقارَن (What to compare) اختر الطرفان كما هما (The two endpoints) ثم مقارنة (Compare). تظهر فروق docs/history.md وstyles.css. أعد المقارنة باختيار التغييرات منذ أساس الدمج (Changes since the merge base) للطرفين نفسيهما؛ تتطابق الأشجار هنا لكون التاريخ خطيًا. ذلك لا يثبت معنى log المتماثل. إلغاء (Cancel) يخرج دون تعديل التاريخ.
في الطرفية
البديل الأصلي قبل نجاح العملية المقابلة في التطبيق:
git add -- styles.css
git commit --quiet -m "style: finish the card radius change"نجح الأمران دون ناتج. بعد حفظ الوثيقة:
git add -- docs/history.md
git commit --quiet -m "docs: record logs-and-revisions practice"
git log --reverse --format=%sالسلسلة الفعلية كاملة:
feat: add the GitTree Features hero
feat: add styling and local project checks
feat: refine the hero and card spacing
style: finish the card radius change
docs: record logs-and-revisions practicegit log --format=%s HEAD~2..HEAD
git log --format=%s HEAD~2...HEADطبع كل أمر منفردًا:
docs: record logs-and-revisions practice
style: finish the card radius changeيتطابقان لأن الأقدم سلف للأحدث هنا.
git diff --name-only HEAD~2 HEAD
git rev-list --count HEAD
git symbolic-ref --short HEADالنواتج بالترتيب:
docs/history.md
styles.css
5
mainالملفان فروق شجرة، لا هوية الإيداعين في log.
git rev-parse --verify --quiet HEAD^2لا ناتج، والحالة 1؛ الأحدث ليس إيداع دمج. استخدم HEAD~2 لخطوتين عبر الأب الأول.
git rev-parse HEAD~2اقرأ SHA الحقيقي في التمرين؛ يتغير مع بيانات الإيداع ولا يُستبدل بمعرّف رسم.
النتيجة
في نهاية هذا الدرس: خمسة إيداعات بالترتيب الموثق، والعمل والفهرس دون فروق مُتتبَّعة ولا بعيد أو عملية معلقة. صار نصف القطر 0.75rem ووثيقة التاريخ مُودَعة. اختيار صف قديم لم يفصل HEAD.
أخطاء شائعة
- مساواة الصف المحدد بالموضع المسحوب.
- قراءة ^2 مثل ~2.
- تفسير diff ذي الثلاث نقاط كتفسير log.
- افتراض أن البحث يغطي تاريخًا غير محمّل.
عند حدوث مشكلة
قد تعني مراجعة مفقودة خطأ كتابة أو غياب سلف أو حد سجل سطحي، لا فسادًا. افحص السلسلة والمستودع وأزل مرشحات العرض قبل الاستنتاج. لا تجلب من مضيف عشوائي ولا تعِد الضبط أو التبديل لإصلاح تحديد فقط.
اختبر فهمك
أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.
0 من 6 صحيحة
أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.
جرى التحقق في هذا المتصفح.
تدريب
اختر صفًا أقدم وأثبت بقاء HEAD على main. اشرح الفرق بين عدد الإيداعات ومسارات الفروق. إذا خرج فرع منفصل بإيداع واحد من H3 بينما main عند H5، فتوقّع إيداع الفرع وحده في main..feature، وH4 وH5 أيضًا في main...feature. استخدم نسخة مؤقتة لا النقطة المحددة.
تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.
لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.
خلاصة
- التحديد وHEAD لهما مالكان مختلفان.
- ترميز الآباء والنطاقات يصف النسب لا تغييرات الملفات.
- قارن طرفين محسومين فعليًا وسمِّ السؤال بوضوح.
ذو صلة
المصطلحات الجديدة
Commit — إيداع؛ parent — إيداع أب؛ ref — مرجع؛ revision — مراجعة؛ range — نطاق؛ merge base — أساس الدمج؛ author — المؤلف؛ committer — المُودِع.
نص الفيديو
ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.
اعرض النص
- اقرأ التاريخ دون تحريك فرعك الحالي.
- افحص أولًا التحرير المستقل المتبقي من L007.
- سجّل نصف القطر في إيداع محلي مستقل.
- وثّق السلسلة بالملخّصات، لا بمعرّفات مختلقة.
- تصبح الوثيقة خامس إيداع في هذه السلسلة.
- تحقّق من الترتيب الفعلي قبل شرح ترميز المراجعات.
- يختلف اسم الفرع عن الصف المحدد في الرسم.
- يغيّر تحديد الجذر الإيداع المفحوص فقط.
- الشجرة الكاملة ليست قائمة المتغير في الإيداع وحده.
- ابحث في السجل المحمَّل، لا أرشيف خادم مفترض.
- أعد التحديد إلى الطرف الحالي.
- تؤكد الطرفية الفرع المسحوب بصورة مستقلة.
- خطوتان عبر الآباء ليستا الأب الثاني لإيداع واحد.
- لا أب ثانيًا لهذا الإيداع غير الدامج.
- تتفق المجموعتان هنا لأن الطرفين على مسار نسب واحد.
- يسمّي فرق الشجرة ملفات، لا مجموعة معرّفات إيداع.
- استخدم معرّف إيداع مقاسًا في منتقي المقارنة.
- قارن الشجرتين المحسومتين دون تغيير المراجع.
- يقارن هذا الوضع أساس الدمج بالطرف الأيمن.
- يُظهر الرسم المتباعد اختلاف نطاقي السجل.
- يجيب سجل الثلاث نقاط وفروقها عن سؤالين مختلفين.
- يحتاج التحديد الخاطئ تنقلًا، لا استعادة متلفة.
- تحقّق من السلسلة وثبات HEAD قبل إنشاء فرع.
- أنشئ أسماء الفروع وبدّل إليها عمدًا في الدرس التالي.