في هذا الدرس 6تصفّح المواضيع
تخيل أنك في منتصف تعديل كبير على ملف index.html وفجأة طُلب منك إصلاح خلل عاجل فوراً. ملفاتك الآن غير مكتملة؛ فأنت لا ترغب في تسجيل التزام ناقص يربك سجل المشروع، ولا تريد مسح تعبك بالأمر git restore.
يحل الأمر git stash هذه المشكلة بذكاء؛ إذ يلتقط كافة تعديلاتك في الملفات المتتبعة ومنطقة التجهيز، ويحفظها جانباً في مكدس تخزين مؤقت (LIFO Stack)، ثم يعيد مجلد العمل نظيفاً تماماً ليطابق آخر التزام HEAD.
git status -s
# M index.html
# Shelve unfinished tracked changes onto the stash stack
git stash
git status -s
رغم أن كتابة git stash بمفرده تفي بالغرض سريعاً، فإن العنوان الافتراضي الذي يولده يكرر رسالة آخر التزام فقط، مما يصعّب التمييز بين عدة حفظات مؤقتة. لذلك تُعد الصيغة الحديثة git stash push -m "رسالة وصفية" أفضل ممارسة احترافية.
وبشكل افتراضي، يخزن git stash الملفات المتتبعة فقط. ولتضمين الملفات الجديدة غير المتتبعة (التي تظهر بالرمز ??)، أضف الخيار -u (أو --include-untracked).
# Save tracked edits with a clear descriptive label
git stash push -m "WIP: redesign contact form"
# Include brand-new untracked files (-u) in the stash
git stash push -u -m "WIP: add validation script"
في كل مرة تضيف فيها حفظاً مؤقتاً جديداً، يضعه Git في قمة المكدس تحت المعرّف stash@{0} ويدفع الحفظات الأقدم إلى stash@{1} ثم stash@{2}. ويمكنك فحص محتويات المكدس قبل استعادتها عبر ثلاثة أوامر آمنة:
- الأمر
git stash list: يعرض قائمة بجميع العناصر المخزنة مؤقتاً مرتبةً من الأحدث إلى الأقدم. - الأمر
git stash show: يعرض ملخصاً إحصائياً بالملفات المعدلة داخل أحدث حفظ مؤقت. - الأمر
git stash show -p: يعرض الفروق الكاملة (Patch Diff) سطراً بسطر لأي عنصر تحدده مثلstash@{1}.
git stash list
# stash@{0}: On main: WIP: add validation script
# stash@{1}: On main: WIP: redesign contact form
git stash show stash@{0}
git stash show -p stash@{1}
بعد الانتهاء من مهمتك العاجلة، يمكنك استرجاع تعديلاتك المؤجلة إلى مجلد العمل باستخدام أحد الأمرين الفرعيين pop أو apply:
- الأمر
git stash pop: يطبّق التعديلات المحفوظة فيstash@{0}على مجلد العمل ويحذف ذلك العنصر من مكدس التخزين المؤقت فوراً. - الأمر
git stash apply: يطبّق التعديلات على مجلد العمل مع الاحتفاظ بنسخة العنصر داخل المكدس لإعادة استخدامها عند الحاجة.
# Restore latest stash and remove it from the stack
git stash pop
# Or apply a specific older stash while keeping it in stack
git stash apply stash@{0}
git status -s
يؤدي تراكم عشرات الحفظات المؤقتة القديمة إلى إرباك المطور عند فحص المكدس، ولذلك يوفر Git أمرين فرعيين لتنظيف المكدس:
- الأمر
git stash drop stash@{n}: يحذف عنصراً واحداً محدداً من مكدس التخزين المؤقت (أو يحذفstash@{0}افتراضياً إن لم تحدد الرقم). - الأمر
git stash clear: يفرغ مكدس التخزين المؤقت بالكامل دفعة واحدة ويمسح كافة العناصر المحفوظة فيه نهائياً.
# Remove a single stash entry after applying it
git stash drop stash@{0}
git stash list
# Wipe the entire stash stack clean when no longer needed
git stash clear
يلخص الجدول المرجعي التالي جميع الأوامر الفرعية والخيارات الخاصة بالأمر git stash وأثر كل منها على الملفات ومكدس التخزين المؤقت:
| الأمر الفرعي / الخيار | مثال الصيغة القياسية | الملفات غير المتتبعة | الأثر على مكدس التخزين |
|---|---|---|---|
git stash push -m | git stash push -m "WIP: form" | لا يشملها افتراضياً | يضيف عنصراً جديداً في قمة stash@{0} |
git stash push -u | git stash push -u -m "WIP" | يضمّنها داخل الحفظ المؤقت | يحفظ الملفات المتتبعة وغير المتتبعة معاً |
git stash list | git stash list | قراءة فقط | يعرض جميع عناصر المكدس بترتيب LIFO |
git stash show -p | git stash show -p stash@{0} | تظهر ضمن الفروق إن حُفظت | يعرض تفاصيل الأسطر المعدلة دون تطبيقها |
git stash pop | git stash pop | تُستعاد إلى القرص | يطبق التعديلات ويحذف العنصر من المكدس |
git stash apply | git stash apply stash@{1} | تُستعاد إلى القرص | يطبق التعديلات ويبقي العنصر في المكدس |
git stash drop | git stash drop stash@{0} | تُحذف مع العنصر | يحذف عنصراً واحداً محدداً من المكدس |
git stash clear | git stash clear | تُحذف بالكامل | يفرغ المكدس بالكامل ويمسح جميع عناصره |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس متى تلجأ للتخزين المؤقت عبر git stash، وكيف تحفظ تعديلاتك برسالة واضحة عبر git stash push -m وتضمّن الملفات غير المتتبعة بالخيار -u، بالإضافة إلى فحص مكدس LIFO بالأمرين list وshow -p واستعادة التعديلات أو حذفها عبر pop وapply وdrop وclear. الخطوة التالية: أتممت بذلك الوحدة الرابعة (التراجع والإصلاح)! انتقل الآن إلى الوحدة الخامسة والدرس 20 «مفهوم الفروع وإدارتها عبر الأمر git branch» لإتقان العمل المتوازي.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 git stash التخزين المؤقت git stash
- أمر يحفظ التعديلات غير المكتملة جانباً في مكدس محلي مؤقت ويعيد شجرة العمل نظيفة مطابقة لآخر التزام.
- للمراجعة
- 02 LIFO Stack (stash@{0}) مكدس الأحدث أولاً LIFO
- بنية مكدس يوضع فيها أحدث عنصر مخزن دائماً في القمة تحت المعرّف stash@{0} ويُستعاد أولاً.
- للمراجعة
- 03 git stash pop الأمر الفرعي git stash pop
- أمر فرعي يستعيد التعديلات من قمة المكدس إلى مجلد العمل ويحذف ذلك العنصر من المكدس تلقائياً.
- للمراجعة
- 04 git stash apply الأمر الفرعي git stash apply
- أمر فرعي يطبق التعديلات المخزنة على مجلد العمل مع الإبقاء على العنصر محفوظاً داخل المكدس.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 LIFO LIFO
- Last-In, First-Out
- قاعدة ترتيب المكدس التي تجعل آخر عنصر تم حفظه (stash@{0}) هو أول عنصر يُسترجع.
- للمراجعة
- 02 WIP WIP
- Work In Progress
- تعديلات برمجية قيد الإنجاز لم تكتمل بعد وتُوسم عادةً بالاختصار WIP عند حفظها مؤقتاً.
- للمراجعة
- 03 CLI CLI
- Command-Line Interface
- بيئة سطر الأوامر النصية المستخدمة لإدارة مكدس التخزين المؤقت وفحصه.
- للمراجعة
- 04 HEAD HEAD
- Current Commit Reference Pointer
- لقطة الالتزام النظيفة التي يعيد git stash شجرة العمل إليها فور حفظ التعديلات في المكدس.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
عدّل ملفاً متتبعاً وأنشئ ملفاً جديداً غير متتبع، ثم نفّذ git stash push -u -m "WIP: layout update" وتحقق من نظافة مجلد العمل عبر git status -s.
-
استعرض المكدس عبر git stash list وافحص تفاصيل الأسطر بالأمر git stash show -p stash@{0} ثم استعد التعديلات عبر git stash pop.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي10 أسئلة تنتظرك +
ما الغرض الأساسي من تنفيذ الأمر "git stash" أثناء العمل في المستودع؟
يحفظ git stash التعديلات غير المكتملة في مكدس مؤقت ويعيد مجلد العمل نظيفاً دون الحاجة لإنشاء التزام ناقص.
أي أمر يحفظ التعديلات مؤقتاً مع رسالة وصفية مخصصة ويضمّن أيضاً الملفات الجديدة غير المتتبعة؟
يجمع الأمر git stash push -u -m بين تضمين الملفات غير المتتبعة (-u) وكتابة رسالة توضيحية (-m).
بشكل افتراضي، يقوم الأمر المجرد "git stash" دون خيارات بحفظ الملفات المتتبعة المعدلة والملفات الجديدة غير المتتبعة (??) معاً.
خطأ؛ فالأمر الافتراضي يحفظ الملفات المتتبعة فقط، بينما تتطلب الملفات غير المتتبعة إضافة الخيار -u.
في مخرجات الأمر "git stash list"، أي معرّف يشير دائماً إلى أحدث عملية تخزين مؤقت؟
يعمل مكدس التخزين المؤقت بنظام الأحدث أولاً (LIFO)، لذا يأخذ أحدث عنصر دائماً المعرّف stash@{0}.
أي أمر يعرض الفروق التفصيلية سطراً بسطر (Patch Diff) للتعديلات المحفوظة داخل أحدث عنصر في المكدس؟
يعرض الأمر git stash show -p تفاصيل جميع الأسطر المضافة والمحذوفة داخل الحفظ المؤقت.
ما الفرق الدقيق بين الأمرين "git stash pop" و"git stash apply"؟
يستعيد pop التعديلات ويحذف العنصر من المكدس، بينما يستعيد apply التعديلات مع إبقاء العنصر محفوظاً في المكدس.
أي أمر يحذف عنصراً واحداً محدداً فقط (مثل stash@{1}) من المكدس دون تطبيقه على مجلد العمل؟
يحذف الأمر git stash drop stash@{1} ذلك العنصر المحدد فقط من مكدس التخزين المؤقت.
يؤدي تنفيذ الأمر "git stash clear" إلى مسح جميع عناصر التخزين المؤقت المحفوظة في المكدس دفعة واحدة.
صواب؛ إذ يفرغ الأمر git stash clear مكدس التخزين المؤقت بالكامل ويمسح كافة عناصره.
أي خيار يُمرر مع "git stash pop" أو "git stash apply" لاستعادة الملفات التي كانت مجهزة وقت الحفظ إلى منطقة التجهيز مباشرة؟
يعيد الخيار --index تجهيز الملفات التي كانت في منطقة التجهيز لحظة تنفيذ الحفظ المؤقت.
يمكنك فحص ملخص التعديلات المحفوظة داخل عنصر في المكدس بأمان عبر "git stash show" دون تعديل ملفات مجلد العمل.
صواب؛ فالأمران git stash show وgit stash list مخصصان للفحص والقراءة فقط ولا يغيران ملفات العمل.