في هذا الدرس 6تصفّح المواضيع
بعد تجهيز التعديلات المطلوبة داخل منطقة التجهيز (.git/index)، يأتي دور الأمر git commit لتحويل تلك المسودة المجهزة إلى لقطة دائمة محفوظة في المستودع المحلي:
- حفظ المجهز فقط: لا يدخل في اللقطة إلا ما أُضيف إلى منطقة التجهيز، أما التعديلات غير المجهزة والملفات غير المتتبعة فتبقى كما هي في مجلد العمل.
- ملخص التأكيد الفوري: يطبع Git فور الحفظ اسم الفرع الحالي، والبصمة المختصرة للالتزام الجديد، وعنوان الرسالة، وعدد الملفات والأسطر المضافة أو المحذوفة.
git add index.html
git commit -m "Create initial home page structure"
# [main (root-commit) 4e9d1a2] Create initial home page structure
# 1 file changed, 18 insertions(+)
يشترط نظام Git إرفاق رسالة نصية واضحة مع كل عملية التزام، ويرفض إتمام الحفظ إذا تُركت الرسالة فارغة. ويمكنك كتابة الرسالة بطريقتين:
- الرسالة السطرية المباشرة (
-m): تمرير الخيارgit commit -m "Subject"لكتابة الرسالة مباشرة في الطرفية، ويمكن تكرار-mمرة ثانية لإضافة فقرة تفصيلية تحت العنوان. - فتح المحرر النصي: تشغيل
git commitبدون-mيفتح المحرر المضبوط فيcore.editorلكتابة رسالة متعددة الأسطر براحة تامة.
# Commit with a concise subject and explanatory body
git add styles.css
git commit -m "Add responsive navbar styles" \
-m "Use CSS Flexbox and collapse menu below 768px."
ماذا يخزن نظام Git فعلياً داخل قاعدة الكائنات عندما تنفذ git commit؟ ينشئ النظام كائن التزام (Commit Object) يضم خمسة عناصر متكاملة:
- 1. بصمة شجرة اللقطة (
tree): مؤشر إلى الشجرة الجذرية التي تمثل محتويات وأسماء كافة ملفات المشروع في تلك اللحظة. - 2. بصمة الالتزام الأب (
parent): رابط يشير إلى اللقطة السابقة مباشرة ليرسم السلسلة الزمنية للمشروع. - 3. بيانات المؤلف (
author) و4. المسجل (committer): الاسم والبريد والتوقيت الزمني الدقيق. - 5. نص رسالة الالتزام: الوصف الهندسي الكامل للتغيير.
إذا كانت تعديلاتك مقتصرة على ملفات متتبعة مسبقاً، يمكنك اختصار خطوة التجهيز عبر تمرير الخيار -a مع git commit ليقوم النظام بتجهيز جميع الملفات المتتبعة المعدلة وحفظها في خطوة واحدة:
- الدمج السريع (
-a -mأو-am): الأمرgit commit -a -m "Update footer links"يجهز تعديلات الملفات المتتبعة ويسجل اللقطة فوراً. - تنبيه جوهري: الخيار
-aلا يشمل أبداً الملفات الجديدة غير المتتبعة (??)؛ إذ لا بد من تمرير الملف الجديد عبرgit addأول مرة.
# Edit an already tracked file and commit in one step
echo "/* dark theme */" >> styles.css
git commit -a -m "Add dark theme comment to stylesheet"
git status -s
تلتزم فرق هندسة البرمجيات الاحترافية بمعيارين ذهبيين عند حفظ اللقطات: الالتزام الذري (Atomic Commit) ومعيار صياغة الرسائل الاحترافية:
- الالتزام الذري المستقل: يجب أن يمثل كل التزام تعديلاً منطقياً واحداً متماسكاً (إصلاح خطأ محدد أو إضافة مكون واحد) ليسهل فحصه أو التراجع عنه مستقبلاً دون التأثير على غيره.
- صيغة الأمر المباشر في العنوان: يُكتب سطر العنوان بصيغة الفعل المباشر في حدود 50 محرفاً مثل
Add login validationأوFix header alignmentوليس بصيغة الماضي العشوائية.
# Good atomic imperative commit messages:
git commit -m "Add keyboard focus styles to modal buttons"
# Avoid vague messages like "update" or "fix stuff"
يلخص الجدول التالي صيغ وخيارات الأمر git commit قبل الانتقال إلى حذف ونقل الملفات عبر git rm وgit mv في الدرس التاسع:
| الأسلوب | مثال الصياغة | السلوك الهندسي الدقيق |
|---|---|---|
| حفظ المجهز برسالة سطرية | git commit -m "Add hero banner" | حفظ التغييرات الموجودة في منطقة التجهيز فقط |
| حفظ بعنوان وفقرة تفصيلية | git commit -m "Title" -m "Body" | تسجيل عنوان موجز متبوع بفقرة توضيحية مفصلة |
| الحفظ السريع للمتتبع | git commit -a -m "Update CSS" | تجهيز وحفظ جميع الملفات المتتبعة المعدلة بخطوة واحدة |
| الحفظ عبر المحرر النصي | git commit | فتح المحرر الافتراضي لكتابة رسالة متعددة الأسطر |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حفظ اللقطات الدائمة بالأمر git commit -m، وكتابة الرسائل متعددة الأسطر، وفهم المكونات الخمسة لكائن الالتزام، واستخدام الخيار السريع -a مع الملفات المتتبعة، وتطبيق معايير الالتزام الذري. الخطوة التالية: انتقل الآن إلى الدرس رقم 9 «حذف ونقل وإعادة تسمية الملفات عبر git rm وgit mv».
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Commit Object كائن الالتزام Commit
- كائن دائم في قاعدة بيانات Git يحفظ مؤشر شجرة اللقطة والالتزام الأب وبيانات المؤلف ونص الرسالة.
- للمراجعة
- 02 Root Commit الالتزام الجذري الأول
- أول لقطة التزام تُسجل في تاريخ المستودع ولا يسبقها أي التزام أب.
- للمراجعة
- 03 Atomic Commit الالتزام الذري المتماسك
- التزام يضم تعديلاً منطقياً واحداً مكتملاً ومستقلاً دون خلط تعديلات متفرقة غير مترابطة.
- للمراجعة
- 04 Imperative Mood Subject عنوان بصيغة الفعل المباشر
- صياغة سطر عنوان الالتزام بفعل أمر مباشر يصف بدقة ما يفعله هذا الالتزام عند تطبيقه.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SHA-1 SHA-1
- 40-Hex Commit Identifier
- البصمة الرقمية الفريدة التي تميز كل كائن التزام في السجل.
- للمراجعة
- 02 TREE TREE
- Snapshot Directory Tree Object
- كائن الشجرة الذي يشير إليه الالتزام لتمثيل هيكل المجلدات والملفات في اللقطة.
- للمراجعة
- 03 HEAD HEAD
- Current Branch Tip Reference
- المؤشر الذي يتقدم تلقائياً ليشير إلى أحدث لقطة فور نجاح تنفيذ git commit.
- للمراجعة
- 04 MSG MSG
- Commit Explanation Message
- الرسالة التوضيحية المرفقة بالالتزام عبر الخيار -m أو المحرر.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
بدّل بين تبويبات المحاكي التفاعلي الثلاثة لمقارنة الحفظ العادي بـ -m والرسالة المفصلة والخيار السريع -a -m.
-
جهّز ملفاً معدلاً ونفّذ git commit مع تكرار الخيار -m لكتابة عنوان موجز وفقرة شرح واضحة.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
من أي منطقة يقرأ الأمر القياسي git commit -m التعديلات لإنشاء اللقطة الدائمة؟
يسجل الأمر git commit اللقطة الدائمة بناءً على المحتويات الموجودة في منطقة التجهيز (.git/index) حصراً.
أي خيار يتيح لك كتابة رسالة الالتزام مباشرة داخل سطر الأوامر؟
يُستخدم الخيار -m لتمرير نص رسالة الالتزام مباشرة في الطرفية.
ماذا يفعل تنفيذ الأمر git commit -a -m "Update styles"؟
يقوم الخيار -a بتجهيز كافة الملفات المتتبعة المعدلة أو المحذوفة وحفظها في لقطة واحدة، مع تجاهل الملفات غير المتتبعة.
يقوم الأمر git commit -a -m "msg" بتجهيز وحفظ الملفات الجديدة غير المتتبعة (??) التي لم يسبق إضافتها من قبل.
خطأ؛ فالخيار -a يؤثر على الملفات المتتبعة مسبقاً فقط، أما الملفات الجديدة فلا بد من إضافتها بالأمر git add.
أي عنصر مما يلي لا يُخزَّن داخل كائن الالتزام (Commit Object) في Git؟
يحفظ كائن الالتزام بصمة الشجرة والأب والمؤلف والرسالة، ولا يحفظ إعدادات شاشة نظام التشغيل.
يجمع الالتزام الذري (Atomic Commit) تعديلاً منطقياً واحداً متماسكاً بدلاً من خلط تغييرات متفرقة غير مترابطة.
صواب؛ فالالتزامات الذرية تسهل مراجعة الكود وتتبع الأخطاء والتراجع الآمن عند الحاجة.
أي سطر عنوان مما يلي يلتزم بالمعيار الاحترافي لصياغة رسائل الالتزام (صيغة الفعل المباشر)؟
العبارة "Add responsive navigation bar" تبدأ بفعل مباشر واضح يصف الوظيفة المضافة بدقة.
كم التزاماً أباً (Parent Commit) يمتلكه الالتزام الأول (root-commit) في مستودع Git جديد؟
يمثل الالتزام الجذري نقطة البداية الأولى للتاريخ ولذلك لا يمتلك أي التزام أب (صفر).