في هذا الدرس 6تصفّح المواضيع
ما الفرق بين حذف ملف متتبع عبر نظام التشغيل مباشرة (بالأمر العادي rm أو زر الحذف) وبين استخدام أمر Git المخصص git rm؟
- الحذف العادي من نظام التشغيل: يزيل الملف من مجلد العمل فقط، فيظهر في
git status -sبالرمزDفي العمود الأيمن (حذف غير مجهز)، ويحتاج خطوة إضافية لتجهيزه. - الأمر
git rm <file>: يحذف الملف من القرص ويجهز عملية الحذف في الفهرس فوراً (الرمزDفي العمود الأيسر) بخطوة واحدة نظيفة جاهزة للالتزام.
# Remove a tracked file from both disk and Staging Index
git rm legacy-script.js
git status -s
# D legacy-script.js
git commit -m "Remove deprecated legacy script"
من أهم الأوامر المنقذة في العمل اليومي الأمر git rm --cached <file>؛ فلو افترضنا أنك أضفت بالخطأ ملف إعدادات محلي مثل .env إلى التتبع، وترغب في إخراجه من مستودع Git مع الإبقاء عليه سليماً على قرص حاسوبك ليعمل المشروع:
- الحذف من الفهرس فقط: يزيل الأمر
git rm --cached .envالملف من منطقة التجهيز والتتبع دون أن يمس الملف الفعلي على القرص إطلاقاً. - التحول إلى ملف غير متتبع: بعد حفظ الالتزام يتوقف Git عن مراقبة الملف مع بقائه آمناً في مجلد عملك.
# Stop tracking .env in Git while keeping the file on disk
git rm --cached .env
git status -s
# D .env
# ?? .env
يزودك الأمر git rm بحماية افتراضية تمنع حذف المجلدات أو الملفات التي تضم تعديلات غير محفوظة عن طريق الخطأ:
- حذف المجلدات المتكرر (
-r): لحذف مجلد فرعي متتبع بكامل محتوياته، مرر الخيار-rمثلgit rm -r old-components/(ويمكن دمجه مع--cachedلإلغاء تتبع مجلد كامل دون حذفه من القرص). - خيار الإجبار عند وجود تعديلات (
-f): يرفض Git حذف ملف يحتوي على تعديلات لم تُحفظ بعد إلا إذا مررت الخيار-fصراحةً.
لإعادة تسمية ملف متتبع أو نقله إلى مجلد فرعي آخر داخل المستودع، استخدم الأمر المدمج git mv <source> <destination>:
- إعادة تسمية ملف في مكانه: الأمر
git mv banner.html hero.htmlيغير اسم الملف على القرص ويجهز العملية في الفهرس فوراً بالرمزR. - نقل ملف إلى مجلد آخر: الأمر
git mv hero.html partials/hero.htmlينقل الملف إلى المجلد الفرعي ويجهز النقل بخطوة واحدة.
# Rename a tracked file and stage the change automatically
git mv banner.html hero.html
git status -s
# R banner.html -> hero.html
git commit -m "Rename banner template to hero"
كيف يتعامل Git داخلياً مع إعادة تسمية الملفات؟ خلافاً للأنظمة القديمة، يركز Git على تتبع بصمة المحتوى نفسه:
- ثبات بصمة كائن المحتوى (Blob): عند تغيير اسم ملف دون تعديل محتواه، يشير الاسم الجديد في شجرة اللقطة إلى نفس كائن المحتوى ذي البصمة المتطابقة تماماً دون نسخ بايت واحد إضافي.
- الاكتشاف الذكي للتشابه: حتى لو غيرت اسم الملف وعدلت بضعة أسطر بداخله، يقيس Git نسبة تشابه المحتوى ويكتشف تلقائياً أنها عملية إعادة تسمية (
R).
mkdir -p assets/css
git mv styles.css assets/css/main.css
git status -s
# R styles.css -> assets/css/main.css
يلخص الجدول المرجعي التالي الفروق العملية بين أوامر الحذف وإلغاء التتبع والنقل قبل الانتقال إلى قواعد تجاهل الملفات عبر .gitignore في الدرس العاشر:
| صيغة الأمر | الأثر على قرص مجلد العمل | الأثر على منطقة التجهيز Index | رمز الحالة المختصر |
|---|---|---|---|
| git rm <file> | يحذف الملف فعلياً من القرص | يجهز حذف الملف للقطة القادمة | D <file> |
| git rm --cached <file> | يبقي الملف سليماً على القرص | يزيل الملف من فهرس التتبع فقط | D مع ?? |
| git rm -r <folder> | يحذف المجلد ومحتوياته من القرص | يجهز حذف جميع ملفات المجلد | D <folder/...> |
| git mv <old> <new> | يعيد تسمية أو ينقل الملف على القرص | يجهز إعادة التسمية بخطوة واحدة | R <old> -> <new> |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس الفرق بين الحذف العادي والأمر git rm، وإلغاء تتبع الملفات مع إبقائها على القرص عبر git rm --cached، وحذف المجلدات بالخيار -r، ونقل وتسمية الملفات بالأمر git mv. الخطوة التالية: انتقل الآن إلى الدرس رقم 10 «تجاهل الملفات والمجلدات عبر ملف gitignore» لإتمام الوحدة الثانية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Tracked File Removal حذف الملف المتتبع
- استخدام الأمر git rm لحذف الملف من مجلد العمل وتجهيز إزالته في الفهرس بخطوة واحدة.
- للمراجعة
- 02 Cached Untracking إلغاء التتبع مع بقاء الملف
- تنفيذ git rm --cached لإخراج الملف من تتبع Git مع الحفاظ على نسخته الفعلية على قرص الجهاز.
- للمراجعة
- 03 Tracked Rename إعادة تسمية متتبعة
- استخدام الأمر git mv لتغيير اسم الملف أو مساره وتجهيز التغيير تلقائياً في منطقة التجهيز.
- للمراجعة
- 04 Rename Similarity Detection اكتشاف تشابه المحتوى عند النقل
- آلية فحص تطابق وتشابه بصمات المحتوى التي يكتشف بها Git انتقال الملفات وتغير أسمائها.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 RM RM
- Remove Tracked File Subcommand
- أمر الحذف في Git لإزالة الملفات من الفهرس ومجلد العمل.
- للمراجعة
- 02 MV MV
- Move or Rename File Subcommand
- أمر النقل وإعادة التسمية في Git مع التجهيز التلقائي.
- للمراجعة
- 03 ENV ENV
- Environment Configuration File (.env)
- ملف متغيرات البيئة المحلي الذي يُستخرج من التتبع عبر --cached إذا أُضيف بالخطأ.
- للمراجعة
- 04 SHA-1 SHA-1
- Content Blob Hash
- بصمة محتوى الملف التي تظل ثابتة تماماً عند نقل الملف أو تغيير اسمه دون تعديل نصه.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
بدّل بين تبويبات المحاكي التفاعلي الثلاثة لملاحظة الفرق العملي بين git rm و--cached وgit mv.
-
نفّذ git rm --cached على ملف تجريبي وتحقق من بقائه على القرص وتحوله إلى غير متتبع في git status -s.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يفعل تنفيذ الأمر git rm legacy.js بشكل افتراضي؟
يحذف الملف من مجلد العمل على القرص ويجهز عملية الحذف في منطقة التجهيز فوراً.
ما الأمر الذي يزيل ملف ".env" من تتبع Git مع الإبقاء على الملف الفعلي سليماً على قرص حاسوبك؟
يزيل الأمر git rm --cached .env الملف من الفهرس فقط ويتركه محفوظاً في مجلد العمل على القرص.
يؤدي تنفيذ الأمر git rm --cached config.json إلى مسح الملف نهائياً من القرص الصلب.
خطأ؛ فالخيار --cached مخصص تحديداً للإبقاء على الملف فوق القرص مع إخراجه من فهرس Git فقط.
ما الخيار الواجب تمريره مع الأمر git rm لحذف مجلد فرعي متتبع بكامل محتوياته؟
يتيح الخيار -r الحذف المتكرر للمجلدات ومحتوياتها.
ما الأمر الذي يعيد تسمية الملف old-nav.js إلى main-nav.js على القرص ويجهز التغيير في الفهرس بخطوة واحدة؟
ينفذ الأمر git mv old-nav.js main-nav.js إعادة التسمية وتجهيزها في الفهرس فوراً.
ما رمز الحالة الذي يظهر في العمود الأيسر من مخرجات git status -s بعد تنفيذ الأمر git mv؟
يظهر الحرف R للدلالة على عملية إعادة تسمية مجهزة في الفهرس.
عند إعادة تسمية ملف دون تعديل محتواه، يعيد Git استخدام نفس كائن المحتوى (Blob) ذي البصمة المتطابقة دون تكرار البيانات.
صواب؛ لأن كائنات المحتوى تحفظ البيانات بمعزل عن الاسم، فيتغير الاسم داخل شجرة المجلد فقط.
ما تسلسل الأوامر الثلاثة الذي يكافئ تماماً تنفيذ الأمر المختصر "git mv a.html b.html"؟
يكافئ نقل الملف في نظام التشغيل متبوعاً بحذف الاسم القديم بـ git rm وتجهيز الاسم الجديد بـ git add.