في هذا الدرس 6تصفّح المواضيع
لنقل التعديلات من مجلد العمل إلى منطقة التجهيز (.git/index) نستخدم الأمر git add. وعلى الرغم من اسمه الحرفي، فإن وظيفته الهندسية الدقيقة لا تقتصر على الملفات الجديدة فحسب، بل تعني «أضف المحتوى الحالي لهذا الملف إلى فهرس التجهيز استعداداً للقطة القادمة»:
- بدء تتبع الملفات الجديدة: يحوّل الملف غير المتتبع (
??) إلى ملف مجهز جديد (A). - تجهيز تعديلات الملفات المتتبعة: ينسخ النسخة الحالية للملف المعدل (
M) إلى الفهرس ليصبح مجهزاً (M).
git add index.html
git status -s
# A index.html
يمتاز الأمر git add بمرونة عالية في تحديد الملفات المراد تجهيزها؛ إذ يمكنك تمرير ملف واحد أو عدة ملفات مفصولة بمسافة أو مسار مجلد فرعي كامل:
- ملف واحد محدد: الأمر
git add index.htmlيجهز هذا الملف وحده فقط. - عدة ملفات معاً: الأمر
git add index.html styles.css app.jsيجهز الملفات الثلاثة في سطر واحد. - مجلد فرعي بالكامل: الأمر
git add src/يجهز كافة الملفات داخل المجلدsrc/ومجلداته الفرعية.
# Stage multiple specific files at once
git add index.html styles.css
# Stage everything inside the src/ subfolder
git add src/
git status -s
لتجهيز مجموعة كبيرة من التعديلات دفعة واحدة، يوفر Git ثلاثة خيارات شهيرة يُعد التمييز الدقيق بينها من أهم الأساسيات الهندسية:
- الأمر
git add .: يجهز الملفات الجديدة والمعدلة والمحذوفة ضمن المجلد المفتوح حالياً ومجلداته الفرعية. - الأمر
git add -A(أو--all): يجهز كافة الملفات الجديدة والمعدلة والمحذوفة في المستودع بأكمله حتى لو نفذته وأنت داخل مجلد فرعي. - الأمر
git add -u(أو--update): يجهز التعديلات والحذف في الملفات المتتبعة مسبقاً فقط، ويتجاهل أي ملفات جديدة غير متتبعة (??).
من القواعد الذهبية في Git أن الأمر git add يجهز نسخة الملف كما هي في اللحظة الزمنية التي شغّلت فيها الأمر؛ فإذا نفذت git add index.html ثم فتحت المحرر وأضفت سطراً جديداً داخل index.html:
- انقسام النسخة إلى حالتين (
MM): تظل منطقة التجهيز محتفظة بالنسخة السابقة، بينما يظل التعديل الجديد في مجلد العمل غير مجهز. - ضرورة إعادة التجهيز: يجب تشغيل
git add index.htmlمرة ثانية لضم التعديل الأخير إلى اللقطة القادمة.
git add index.html
# Edit index.html again on disk
echo "<footer>v2</footer>" >> index.html
git status -s
# MM index.html
git add index.html
ماذا لو أجريت تعديلين غير مترابطين داخل ملف واحد (كإصلاح خطأ عاجل في أعلى الملف وبدء ميزة غير مكتملة في أسفله)؟ هنا يبرز الخيار الاحترافي git add -p (أو --patch) للتجهيز الجزئي التفاعلي؛ حيث يعرض Git كل جزء متغير (Hunk) على حدة ويسألك عن قرارك:
- الحرف
y: تجهيز هذا الجزء فقط في الفهرس. - الحرف
n: تخطي هذا الجزء وإبقاؤه في مجلد العمل دون تجهيز. - الحرفان
sوq: تقسيم الجزء إلى قطع أصغر (s) أو الإنهاء والخروج (q).
# Interactively choose which hunks of a file to stage
git add -p index.html
# Stage this hunk [y,n,q,a,d,s,e,?]? y
# Dry-run preview without actually staging (-n):
git add -n .
يقارن الجدول الشامل التالي بين كافة صيغ وخيارات الأمر git add قبل الانتقال إلى حفظ اللقطات الدائمة بالأمر git commit في الدرس الثامن:
| صيغة الأمر | الملفات الجديدة غير المتتبعة | الملفات المتتبعة المعدلة | نطاق التأثير |
|---|---|---|---|
| git add <file> | تُجهز إذا ذُكر اسمها | تُجهز إذا ذُكر اسمها | الملفات المحددة بالاسم فقط |
| git add . | تُجهز بالكامل | تُجهز بالكامل | المجلد الحالي وجميع مجلداته الفرعية |
| git add -A | تُجهز بالكامل | تُجهز بالكامل | كامل المستودع من أي مسار فرعي |
| git add -u | تُتجاهل ولا تُجهز | تُجهز بالكامل | الملفات المتتبعة مسبقاً فقط |
| git add -p | لا يشملها افتراضياً | تُجهز الأجزاء المختارة فقط | اختيار تفاعلي جزءاً بجزء داخل الملف |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس آلية عمل منطقة التجهيز عبر الأمر git add، وتجهيز ملف منفرد أو عدة ملفات، والفروق الدقيقة بين git add . وgit add -A وgit add -u، وسبب إعادة التجهيز بعد التعديل، والتجهيز الجزئي بالخيار -p. الخطوة التالية: انتقل الآن إلى الدرس رقم 8 «حفظ اللقطات الدائمة عبر الأمر git commit» لتسجيل اللقطات في المستودع.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Staging Index فهرس التجهيز Index
- ملف الفهرس داخل .git الذي يجمع فيه الأمر git add النسخ المحددة للملفات تمهيداً لحفظها في اللقطة القادمة.
- للمراجعة
- 02 Patch Staging التجهيز الجزئي التفاعلي
- استخدام الخيار git add -p لاختيار وتجهيز أجزاء محددة من تعديلات الملف وترك بقية الأجزاء في مجلد العمل.
- للمراجعة
- 03 Hunk المقطع المعدل Hunk
- كتلة متصلة من الأسطر المضافة أو المعدلة داخل الملف يعرضها Git أثناء التجهيز الجزئي التفاعلي.
- للمراجعة
- 04 Dry-Run Staging المعاينة التجريبية للتجهيز
- تشغيل git add -n لاستعراض الملفات التي ستدخل الفهرس دون تنفيذ أي تعديل فعلي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 INDEX INDEX
- Git Staging Area File (.git/index)
- المصطلح التقني الداخلي لمنطقة التجهيز التي يحدثها الأمر git add.
- للمراجعة
- 02 BLOB BLOB
- Binary Large Object
- كائن محتوى الملف المضغوط الذي ينشئه Git داخل .git/objects لحظة تنفيذ git add.
- للمراجعة
- 03 GLOB GLOB
- File Wildcard Pattern
- أنماط مطابقة المسارات والملفات لبناء أوامر تجهيز متعددة.
- للمراجعة
- 04 MM MM
- Modified Staged and Modified Unstaged
- رمز الحالة الذي يظهر عند تعديل الملف مجدداً بعد تنفيذ git add عليه.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
بدّل بين تبويبات المحاكي التفاعلي الثلاثة لمقارنة تجهيز ملف محدد والخيار -u والخيار الشامل -A.
-
جهّز ملفاً بالأمر git add ثم عدّله مرة أخرى وافحص ظهور الرمز MM في git status -s ثم أعد تجهيزه.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الوظيفة الأساسية للأمر git add ضمن معمارية المناطق الثلاث في Git؟
ينقل الأمر git add النسخة الحالية للملفات الجديدة أو المعدلة من مجلد العمل إلى منطقة التجهيز (.git/index).
أي خيار في الأمر git add يجهز تعديلات الملفات المتتبعة مسبقاً فقط ويتجاهل الملفات الجديدة غير المتتبعة (??)؟
يقوم الخيار git add -u بتجهيز التعديلات والحذف للملفات المتتبعة فقط دون إضافة أي ملفات غير متتبعة.
ما الأمر الذي يجهز كافة الملفات الجديدة والمعدلة والمحذوفة في المستودع بأكمله بغض النظر عن المجلد الفرعي المفتوح حالياً؟
يجهز الأمر git add -A جميع التغييرات في كامل شجرة المستودع من أي مسار فرعي.
إذا عدّلت ملفاً بعد تشغيل git add عليه، فيجب عليك تشغيل git add مرة ثانية لضم التعديل الجديد إلى اللقطة القادمة.
صواب؛ لأن git add يجهز محتوى الملف كما كان لحظة تشغيل الأمر فقط.
ما الأمر الذي يتيح لك مراجعة وتجهيز أجزاء محددة (Hunks) داخل ملف واحد تفاعلياً مع ترك بقية الأجزاء غير مجهزة؟
يفتح الأمر git add -p وضع التجهيز الجزئي التفاعلي لاختيار المقاطع المطلوبة فقط.
أثناء التجهيز الجزئي التفاعلي (git add -p)، ما الحرف الذي تضغطه للموافقة على تجهيز المقطع المعروض حالياً؟
الضغط على الحرف y يجهز المقطع الحالي في الفهرس، بينما يتخطاه الحرف n.
يُستخدم الأمر git add مرة واحدة فقط للملفات الجديدة غير المتتبعة ولا يُستخدم أبداً مع الملفات المتتبعة المعدلة.
خطأ؛ بل يُستخدم git add مع الملفات المتتبعة في كل مرة تعدلها وترغب في تجهيز تعديلاتها للالتزام القادم.
أي خيار ينفذ معاينة تجريبية للأمر git add لعرض الملفات التي ستُجهز دون تعديل الفهرس فعلياً؟
يعرض الخيار -n (أو --dry-run) معاينة للملفات دون تعديل منطقة التجهيز.