في هذا الدرس 6تصفّح المواضيع
أثناء كتابة الكود يومياً، قد تجري تعديلات تجريبية داخل مجلد العمل ثم تقرر التراجع عنها قبل تجهيزها. قُدِّم الأمر الحديث git restore <file> في الإصدار Git 2.23 ليتخصص في استعادة الملفات بوضوح؛ حيث يتجاهل التعديلات المحلية غير المجهزة عبر نسخ حالة الملف من منطقة التجهيز وإعادتها إلى مجلد العمل:
- استعادة ملف واحد: نفّذ
git restore index.htmlلإلغاء التعديلات غير المحفوظة في هذا الملف فقط. - استعادة جميع الملفات المتتبعة: نفّذ
git restore .للتراجع عن كل التعديلات غير المجهزة في المجلد الحالي. - تنبيه أمان مهم: التعديلات التي تُمسح من مجلد العمل قبل تجهيزها لا يمكن استرجاعها لأن Git لم يسجل لها لقطة بعد.
# Check modified unstaged file
git status -s
# M index.html
# Discard unstaged edits in index.html
git restore index.html
ماذا لو أضفت ملفاً بالخطأ إلى منطقة التجهيز بالأمر git add وترغب في إلغاء تجهيزه مع الاحتفاظ بتعديلاتك البرمجية داخل الملف؟ يوجّه الخيار --staged في الأمر git restore --staged <file> نظام Git إلى تحديث نسخة الفهرس من HEAD فقط، فيخرج الملف من اللقطة القادمة بينما تبقى تعديلاتك في مجلد العمل سليمة 100%.
# Accidentally staged styles.css
git add index.html styles.css
# Unstage styles.css while keeping local edits intact
git restore --staged styles.css
git status -s
# M index.html
# M styles.css
في كثير من الأحيان تحتاج إلى استرجاع نسخة ملف واحد فقط كما كانت في التزام سابق دون المساس ببقية ملفات المشروع. يتيح لك الخيار --source (أو اختصاره -s) تحديد بصمة أي التزام تاريخي أو مؤشر نسبي مثل HEAD~1 لنسخ حالة الملف من ذلك الالتزام مباشرة إلى مجلد العمل.
# Restore index.html from 1 commit before HEAD
git restore --source=HEAD~1 index.html
# Or using shorthand -s with an abbreviated hash
git restore -s 7b2d109 styles.css
عندما يحتوي الملف الواحد على تعديل سليم تريد الإبقاء عليه مع سطر تجريبي مؤقت ترغب في مسحه، يتيح لك الخيار التفاعلي الجزئي git restore -p <file> تقسيم التعديلات إلى مقاطع مستقلة، ويسألك عند كل مقطع هل تريد التراجع عنه بالحرف y أم الاحتفاظ به بالحرف n.
# Selectively discard individual change hunks
git restore -p app.js
# Discard this hunk from worktree [y,n,q,a,d,e,?]? y
بما أن الأمر git restore يتعامل حصرياً مع الملفات المتتبعة المسجلة لدى Git، فإن الملفات الجديدة غير المتتبعة (?? في مخرجات الحالة) لا تتأثر به. ولإزالة الملفات والمجلدات غير المتتبعة بأمان، يوفر Git الأمر المخصص git clean:
- المعاينة الآمنة أولاً بالخيار
-n: نفّذ دائماًgit clean -ndأولاً لعرض قائمة الملفات والمجلدات التي سيتم حذفها دون مسح أي ملف فعلياً. - التنفيذ الفعلي بالخيار
-fd: بعد التأكد من القائمة، نفّذgit clean -fdلحذف الملفات غير المتتبعة (-f) والمجلدات غير المتتبعة (-d).
# 1. ALWAYS preview untracked files and folders first (-nd)
git clean -nd
# Would remove temp-notes.txt
# Would remove tmp-cache/
# 2. Delete untracked files and directories (-fd)
git clean -fd
يقارن الجدول التالي بين أوامر استعادة الملفات وتنظيف مجلد العمل ومستوى أمان كل أمر:
| الأمر | المنطقة المستهدفة | الأثر على التعديلات المحلية |
|---|---|---|
git restore <file> | مجلد العمل Working Tree | يمسح التعديلات غير المجهزة من الملف المتتبع نهائياً |
git restore --staged <file> | منطقة التجهيز Staging Area | يلغي تجهيز الملف بأمان ويحتفظ بتعديلاتك في مجلد العمل |
git restore -s HEAD~1 <file> | مجلد العمل Working Tree | يستبدل الملف بنسخته المحفوظة في الالتزام HEAD~1 |
git clean -nd | الملفات غير المتتبعة (معاينة) | معاينة آمنة فقط دون حذف أي ملف |
git clean -fd | الملفات والمجلدات غير المتتبعة | يحذف الملفات والمجلدات غير المتتبعة من القرص نهائياً |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس التراجع عن تعديلات مجلد العمل عبر git restore، وإلغاء تجهيز الملفات بأمان عبر git restore --staged، واسترجاع ملف من التزام سابق بالخيار --source، وتنظيف الملفات غير المتتبعة بالأمر git clean. الخطوة التالية: انتقل الآن إلى الدرس رقم 16 «تعديل الالتزام الأخير عبر الأمر git commit --amend» لإصلاح رسالة الالتزام الأخير أو إضافة ملف منسي إليه.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 git restore الأمر git restore
- تخلّص من التعديلات غير المرغوبة في مجلد العمل عبر git restore، وألغِ تجهيز الملفات بأمان عبر --staged، ونظّف الملفات غير المتتبعة بـ git clean.
- للمراجعة
- 02 Why Git Introduced restore لماذا قُدّم الأمر git restore
- المفهوم الأساسي لدرس التراجع عن تعديلات الملفات وإلغاء التجهيز عبر git restore في سير عمل Git.
- للمراجعة
- 03 Discarding Working Tree Edits إلغاء تعديلات مجلد العمل
- التطبيق العملي المباشر لمفهوم إلغاء تعديلات مجلد العمل.
- للمراجعة
- 04 Unstaging with restore --staged إلغاء التجهيز عبر --staged
- قواعد التحقق وأفضل الممارسات الخاصة بـ إلغاء التجهيز عبر --staged.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SHA-1 SHA-1
- Secure Hash Algorithm 1
- دالة التجزئة التشفيرية المستخدمة لتوليد معرف فريد لكل كائن والتزام في Git.
- للمراجعة
- 02 DVCS DVCS
- Distributed Version Control System
- معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
- للمراجعة
- 03 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر النصية التي تُنفذ فيها أوامر فحص السجل والتراجع.
- للمراجعة
- 04 HEAD HEAD
- Current Active Commit Pointer
- المؤشر المرجعي الذي يشير إلى الالتزام النشط حالياً في المستودع المحلي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أوامر الطرفية المشروحة في لماذا قُدّم الأمر git restore داخل مستودع تجريبي محلي وافحص المخرجات.
-
بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم إلغاء تعديلات مجلد العمل وقارن الأوامر والمخرجات.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يفعل الأمر git restore index.html عندما يحتوي الملف على تعديلات غير مجهزة؟
ينسخ الأمر git restore نسخة الملف من منطقة التجهيز إلى مجلد العمل فيمسح التعديلات غير المجهزة.
يؤدي تنفيذ git restore --staged styles.css إلى إخراج الملف من منطقة التجهيز مع الاحتفاظ بتعديلاتك داخل مجلد العمل.
صواب؛ يلغي الخيار --staged تجهيز الملف فقط ولا يمسح التعديلات المكتوبة في مجلد العمل.
أي خيار يتيح للأمر git restore استرجاع نسخة ملف من التزام سابق محدد مثل HEAD~1؟
يحدد الخيار --source (أو -s) الالتزام المرجعي المطلوب جلب نسخة الملف منه.
لماذا ينبغي دائماً تنفيذ الأمر git clean -nd قبل تشغيل الأمر git clean -fd؟
يعرض الخيار -n معاينة آمنة للملفات والمجلدات غير المتتبعة التي ستُحذف نهائياً قبل مسحها الفعلي.
التعديلات غير المجهزة التي لم تُضف للفهرس أو تُحفظ في التزام يمكن استرجاعها بسهولة من سجل Git بعد مسحها بـ git restore.
خطأ؛ لأن التعديلات غير المجهزة لم تُسجل داخل قاعدة كائنات Git، فإن مسحها بالأمر git restore نهائي.
ما الخيار الذي يتيح للأمر git restore التراجع التفاعلي عن مقاطع محددة فقط داخل الملف الواحد؟
يقسم الخيار -p التعديلات إلى مقاطع ويسألك عند كل مقطع لتأكيد مسحه أو الإبقاء عليه.
لماذا لا يؤثر تنفيذ الأمر git restore . على الملفات الجديدة غير المتتبعة (??)؟
لأن الأمر git restore يستعيد الملفات المسجلة في الفهرس أو الالتزامات، فلا يتعامل مع الملفات غير المتتبعة.
يؤدي تمرير الخيار -x إلى الأمر git clean (في الصيغة git clean -fdx) إلى حذف الملفات المتجاهلة عبر .gitignore أيضاً.
صواب؛ يزيل الخيار -x الملفات المتجاهلة أيضاً إلى جانب الملفات غير المتتبعة.