انتقل إلى محتوى الدرس
الدرس 19
دورة Version Control

التخزين المؤقت للتعديلات غير المكتملة عبر الأمر git stashGit Stash

احفظ تعديلاتك غير المكتملة مؤقتاً عبر الأمر git stash push -m، وضمّن الملفات غير المتتبعة بـ -u، واستعدها أو احذفها بـ pop وapply وdrop.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تخيل أنك في منتصف تعديل كبير على ملف index.html وفجأة طُلب منك إصلاح خلل عاجل فوراً. ملفاتك الآن غير مكتملة؛ فأنت لا ترغب في تسجيل التزام ناقص يربك سجل المشروع، ولا تريد مسح تعبك بالأمر git restore.

يحل الأمر git stash هذه المشكلة بذكاء؛ إذ يلتقط كافة تعديلاتك في الملفات المتتبعة ومنطقة التجهيز، ويحفظها جانباً في مكدس تخزين مؤقت (LIFO Stack)، ثم يعيد مجلد العمل نظيفاً تماماً ليطابق آخر التزام HEAD.

مخطط يوضح حفظ التعديلات مؤقتاً عبر git stash push وفحص المكدس بـ list وshow واستعادة التعديلات أو حذفها عبر pop وapply وdrop وclear
Shell
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).

Shell
# 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}.
Shell
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: يطبّق التعديلات على مجلد العمل مع الاحتفاظ بنسخة العنصر داخل المكدس لإعادة استخدامها عند الحاجة.
Shell
# 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: يفرغ مكدس التخزين المؤقت بالكامل دفعة واحدة ويمسح كافة العناصر المحفوظة فيه نهائياً.
Shell
# 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 -mgit stash push -m "WIP: form"لا يشملها افتراضياًيضيف عنصراً جديداً في قمة stash@{0}
git stash push -ugit stash push -u -m "WIP"يضمّنها داخل الحفظ المؤقتيحفظ الملفات المتتبعة وغير المتتبعة معاً
git stash listgit stash listقراءة فقطيعرض جميع عناصر المكدس بترتيب LIFO
git stash show -pgit stash show -p stash@{0}تظهر ضمن الفروق إن حُفظتيعرض تفاصيل الأسطر المعدلة دون تطبيقها
git stash popgit stash popتُستعاد إلى القرصيطبق التعديلات ويحذف العنصر من المكدس
git stash applygit stash apply stash@{1}تُستعاد إلى القرصيطبق التعديلات ويبقي العنصر في المكدس
git stash dropgit stash drop stash@{0}تُحذف مع العنصريحذف عنصراً واحداً محدداً من المكدس
git stash cleargit stash clearتُحذف بالكامليفرغ المكدس بالكامل ويمسح جميع عناصره
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تعلمت في هذا الدرس متى تلجأ للتخزين المؤقت عبر git stash، وكيف تحفظ تعديلاتك برسالة واضحة عبر git stash push -m وتضمّن الملفات غير المتتبعة بالخيار -u، بالإضافة إلى فحص مكدس LIFO بالأمرين list وshow -p واستعادة التعديلات أو حذفها عبر pop وapply وdrop وclear. الخطوة التالية: أتممت بذلك الوحدة الرابعة (التراجع والإصلاح)! انتقل الآن إلى الوحدة الخامسة والدرس 20 «مفهوم الفروع وإدارتها عبر الأمر git branch» لإتقان العمل المتوازي.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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 شجرة العمل إليها فور حفظ التعديلات في المكدس.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. عدّل ملفاً متتبعاً وأنشئ ملفاً جديداً غير متتبع، ثم نفّذ git stash push -u -m "WIP: layout update" وتحقق من نظافة مجلد العمل عبر git status -s.

  2. استعرض المكدس عبر git stash list وافحص تفاصيل الأسطر بالأمر git stash show -p stash@{0} ثم استعد التعديلات عبر git stash pop.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما الغرض الأساسي من تنفيذ الأمر "git stash" أثناء العمل في المستودع؟

يحفظ git stash التعديلات غير المكتملة في مكدس مؤقت ويعيد مجلد العمل نظيفاً دون الحاجة لإنشاء التزام ناقص.

02

أي أمر يحفظ التعديلات مؤقتاً مع رسالة وصفية مخصصة ويضمّن أيضاً الملفات الجديدة غير المتتبعة؟

يجمع الأمر git stash push -u -m بين تضمين الملفات غير المتتبعة (-u) وكتابة رسالة توضيحية (-m).

03

بشكل افتراضي، يقوم الأمر المجرد "git stash" دون خيارات بحفظ الملفات المتتبعة المعدلة والملفات الجديدة غير المتتبعة (??) معاً.

خطأ؛ فالأمر الافتراضي يحفظ الملفات المتتبعة فقط، بينما تتطلب الملفات غير المتتبعة إضافة الخيار -u.

04

في مخرجات الأمر "git stash list"، أي معرّف يشير دائماً إلى أحدث عملية تخزين مؤقت؟

يعمل مكدس التخزين المؤقت بنظام الأحدث أولاً (LIFO)، لذا يأخذ أحدث عنصر دائماً المعرّف stash@{0}.

05

أي أمر يعرض الفروق التفصيلية سطراً بسطر (Patch Diff) للتعديلات المحفوظة داخل أحدث عنصر في المكدس؟

يعرض الأمر git stash show -p تفاصيل جميع الأسطر المضافة والمحذوفة داخل الحفظ المؤقت.

06

ما الفرق الدقيق بين الأمرين "git stash pop" و"git stash apply"؟

يستعيد pop التعديلات ويحذف العنصر من المكدس، بينما يستعيد apply التعديلات مع إبقاء العنصر محفوظاً في المكدس.

07

أي أمر يحذف عنصراً واحداً محدداً فقط (مثل stash@{1}) من المكدس دون تطبيقه على مجلد العمل؟

يحذف الأمر git stash drop stash@{1} ذلك العنصر المحدد فقط من مكدس التخزين المؤقت.

08

يؤدي تنفيذ الأمر "git stash clear" إلى مسح جميع عناصر التخزين المؤقت المحفوظة في المكدس دفعة واحدة.

صواب؛ إذ يفرغ الأمر git stash clear مكدس التخزين المؤقت بالكامل ويمسح كافة عناصره.

09

أي خيار يُمرر مع "git stash pop" أو "git stash apply" لاستعادة الملفات التي كانت مجهزة وقت الحفظ إلى منطقة التجهيز مباشرة؟

يعيد الخيار --index تجهيز الملفات التي كانت في منطقة التجهيز لحظة تنفيذ الحفظ المؤقت.

10

يمكنك فحص ملخص التعديلات المحفوظة داخل عنصر في المكدس بأمان عبر "git stash show" دون تعديل ملفات مجلد العمل.

صواب؛ فالأمران git stash show وgit stash list مخصصان للفحص والقراءة فقط ولا يغيران ملفات العمل.