نقاط الاستعادة وstash اليدوي في Git
تمثل المقاطع حالات مختلفة وليست سكربتاً واحداً. اختر الحالة المناسبة لمستودعك واستبدل أسماء الفروع والمسارات وVERIFIED_COMMIT قبل الاستخدام. أوامر الإلغاء تخص العملية النشطة المقابلة فقط؛ لا تنفذ البديلين معاً.
الجواب المختصر
تسجل نقاط استعادة FluxGit حالات لاسترجاع عمليات السجل المشمولة. أما stash اليدوي فيحفظ تعديلات محلية لاستخدام لاحق، وهو مسار منفصل.
المثال وشروطه
يعرض درس G12 تبديل الفرع مع تعديلات معلقة على ملفات tracked. تبقى ملفات untracked في المجلد ما لم تُضمّنها صراحة.
افحص الحالة قبل التعديل
افحص git status --short وgit diff. حدد ما تريد حفظه قبل التبديل؛ المجلد النظيف لا يعني نسخة احتياطية دائمة.
git status --short
git diffاحتفظ بمرجع أو نسخة عمل منفصلة
أنشئ stash يدويًا برسالة واضحة. يحفظ git stash push تعديلات tracked؛ استخدم -u فقط لتضمين ملفات untracked أيضًا.
git stash push -m "school/manual-before-switch"
git stash listالمسار الأول
افحص git stash list وبدّل إلى الفرع المطلوب. عند العودة، راجع السياق قبل تطبيق العنصر المختار.
git switch target-branchاختر النتيجة الأخرى عن قصد
يبقي git stash apply العنصر. يحذفه git stash pop فقط بعد تطبيق ناجح؛ عند حدوث تعارض يبقى العنصر محفوظًا.
git stash show --patch 'stash@{0}'
git stash apply 'stash@{0}'الحدود والاستثناءات
تشمل النقاط التلقائية reset وrebase وcherry-pick وrevert وmerge عبر المسارات المحمية. لا ينشئ discard أوclean نقطة Flux restore point شاملة.
التعارضات والتنظيف
عند التعارض، افحص الملفات وحل المشكلة باختيار واعٍ. لا تكرر pop أو تحذف العنصر لإخفاء حالة معلقة.
تحقق من النتيجة
تحقق من الملفات والفهرس والاختبارات بعد تطبيق stash. احذف العنصر فقط بعد التأكد من حفظ العمل المطلوب.
git status --short
git diff
git diff --cachedأسئلة شائعة
لا يُنشر stash تلقائيًا مع push ولا يحل محل النسخ الاحتياطي. تعتمد الاستعادة على بقاء الحالة المحلية ذات الصلة.
راجع العملية في FluxGit
يجمع Safety Timeline تحركات reflog والمخاطر ونقاط الاستعادة. تظل بيانات النقاط محلية؛ استخدم المعاينة وسياق الاستعادة الخاص بكل عملية.
مراجع Git الرسمية
تبديل فرع Git مع عمل غير مكتمل: شرح مرئي لـ git stash
احفظ تعديلًا متتبعًا باستخدام git stash، وسمّه، ثم بدّل الفرع وعد لاستخدام pop. تعرّف على سبب بقاء الملفات غير المتتبعة والفرق بين apply وpop الناجح. يتضمن أوامر الطرفية.
شاهد على YouTube — يفتح علامة تبويب جديدة
مسجّل في مستودع اختباري. التعليق الصوتي بالإنجليزية والترجمة بالعربية.
اقرأ نص التعليق الصوتي
- أنت في منتصف تعديل وتحتاج إلى مراجعة فرع آخر الآن. العمل غير جاهز لإنشاء commit، ولا تريد فقدانه.
- هذا هو التعديل غير المكتمل في app.py.
- يحفظ stash التغييرات التي يتتبعها Git. هنا يحفظ تعديل app.py ويزيل هذا التعديل من مجلد العمل. تبقى الملفات غير المتتبعة على القرص. يعيد pop الناجح التعديل ويزيل إدخاله من stash.
- اختر Stash current changes وأعطه اسمًا ستتعرف عليه لاحقًا.
- انتقل إلى الفرع الآخر. التعديل المتتبع محفوظ في stash. يبقى الملف غير المتتبع في المجلد.
- انتهيت هناك. عد إلى main.
- نفّذ pop على stash. عاد التعديل إلى app.py واختفى stash.
- apply أم pop؟ يعيد apply التغييرات ويحتفظ بإدخال stash. لا يزيل pop الإدخال إلا إذا طُبقت التغييرات بنجاح. إذا حدثت تعارضات، يُحتفظ بـstash.
- في الطرفية: git stash push مع رسالة، ثم بدّل الفرع وعد، وبعدها git stash pop.
- ملخص: العمل غير المكتمل يوضع على رف، لا في commit غير مكتمل. الدرس التالي: ترتيب commits قبل طلب الدمج.