git stash — أكثر من حفظ طارئ (الحفظ الجزئي، الحفظ المُسمّى، والباقي)
بمجرد أن تتجاوز حفظ الطوارئ: المخزونات المسمية، قائمة المخزونات، عرض -p، مخزون جزئي باستخدام --patch، تطبيق مقابل تطبيق، والمشكلة المتعلقة بالملفات غير المُتَّسقة التي ستجدُها في النهاية.
تعلمت git stash بإثارة. تلقى شخص ما إشعارًا منتصف الميزة، وتم الانتقال فورًا إلى فرع آخر، وكان التخزين هو الطريقة الأسرع للخروج. حفظ اليوم.
ثم كان لديك ثلاث تخزينات، ونسيت ما داخلها، ووضعت التخزين الخاطئ على الفرع الخاطئ، وقررت أن التخزين مُعطل. ليس مُعطلًا. فقط تحتاج إلى عدد قليل من الأوامر الإضافية.
الملفات غير المُراقبة التي تُلقي بها (اقرأ هذا أولًا)
git stash تُحفظ فقط مُراقبة الملفات — الملفات التي تعرفها git بالفعل. الملفات الجديدة التي لم تُحَوَّل بعد تكون غير مرئية له.
# You created a new file mid-feature
echo "temp work" > new-feature.js
git stash
# new-feature.js is still sitting there — stash ignored it entirely
إضافة -u لإدراج الملفات غير المُراقبة:
git stash push -u
هناك أيضًا -a (--all) التي تشمل الملفات المُستبعدة أيضًا. هذا غالبًا ما لا يكون ما تريده — سيُخزن تغييراتك و node_modules الملفات ويجعل استعادة التغييرات صعبًا للغاية. .env أعطِ اسمًا للتخزينات قبل أن تأسف
يُعدّ الرسالة الافتراضية للتخزين:
وهذا لا يُفهم عندما يكون لديك ثلاث تخزينات من ميزات غير مكتملة. استخدم
stash@{0}: WIP on main: a3f1c2d Update dependencies
لإعطاء الاسم: git stash push -m هي قابلة للقراءة في الواقع:
git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"
الآن git stash list استخدم التخزين المحدد بمؤشر:
stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow
تحقق قبل تطبيقه: stash show -p
git stash apply stash@{2} # brings back the auth work
تُعطي ملخصًا للملفات المُعدَّلة. أضف
git stash show لعرض التغيير الكامل: -p هذا هو الأمر الذي يُستبعد من قبل معظم الناس ثم يأسفون عليه. بدونه، فإنك تعيد تطبيق التغييرات بشكل عشوائي على فرع قد تغير بشكل كبير منذ أن قمت بتخزينه. تحقق بسرعة
git stash show -p stash@{2}
تستغرق عشرة ثوانٍ وتُخبرك بالضبط ما سترى تطبيقه. show -p إذا كنت ترغب في مقارنة تغيير التخزين مع الحالة الحالية لملف بشكل جانب إلى جانب، فضع كلاهما في
أداة — أسرع من التفكير في مقارنة النص بشكل يدوي. git diff stash@{N}..HEAD -- path/to/file تطبيق مقابل تطبيق: فرق واحد يهم حقًا
تُعيد كلا الأوامر تخزينك. الفرق المهم:
= تطبيق + حذف سجل التخزين
git stash pop= تطبيق، واحتفظ بالسجلgit stash applyإذا كنت
وأنت تواجه تعارضًا في التكامل، فإن git يُحذف سجل التخزين قبل أن تحلّ المشكلة. الآن لديك مسار مُتعارض وبدون مرجع للتخزين لتراجع إليه. pop يُحتفظ بالسجل أثناء حل التعارض، ثم تقوم بتنظيفه يدويًا:
apply الخط الإضافي
# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0} # explicit cleanup once you're happy
هو يستحقه عندما يمثل التخزين ساعات من العمل. drop التخزين الجزئي باستخدام –patch
في بعض الأحيان، ترغب فقط في تخزين جزء من التغييرات. لديك تدقيق خطأ ونصف ميزة جديدة في نفس الملف، وترغب في تطبيق التدقيق بينما تتخزين كود الميزة.
) يفتح جلسة تفاعلية على وحدة بوحدة:
git stash push --patch (أو -pلكل وحدة، تُحصل على نفس
git stash push -p -m "wip: new feature half"
واجهة كما في y/n/s/q أدخل git add -pلتقسيم وحدة إلى قطع أصغر إذا لم تكن تقسيم git التلقائي دقيقًا بما يكفي. يُبطئ مقارنة بـ تخزين بسيط، لكنه الطريقة الأنظف لتقسيم مسار مُلوث دون إنشاء فرع مؤقت. s ملاحظة واحدة:
الوضع لا يشمل الملفات غير المُراقبة، لذا لا يمكنك تجميعه مع --patch . إذا كانت لديك ملفات جديدة غير مُراقبة تُعدّ جزءًا من الميزة التي تتخزينها، فستحتاج إلى -uأولًا حتى تصبح مُراقبة، ثم قم بتشغيل التخزين الجزئي. git add الاستخدامات الفعلية
الانتقال بين الميزات أثناء العمل.
يترك مُراجع آخر تغطية عاجلة على طلب آخر بينما تكون في منتصف كود غير مكتمل. استخدم التخزين باسم، انتقل إلى الفرع، قم بالنظر، ثم عد وقم بتطبيقه. لا توجد تغييرات مُكتملة، ولا توجد مراوغات فرعية. التحقق من تشغيل نظيف للاختبار.
git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop
تريد التأكد من أن اختباراتك تمر على مسار نظيف — وليس بوجود تغييرات نصف مكتملة تتسرب بشكل غير مقصود إلى بيئة الاختبار: هذا يُكتشف حالة حيث تمر الاختبارات فقط لأن التغييرات المحلية موجودة. يحدث أكثر من المفترض في المخازن التي تحتوي على مُعدات اختبار مشتركة.
git stash push -u
npm test # or pytest, cargo test, whatever
git stash pop
الانتقال بين الفروع مع مسار مُلوث مُتعارض.
يُرفض git التحقق من فرع عندما يكون مسار العمل لديه تغييرات ستنتهي. ابدأ بتخزين، انتقل، وقم بإعادة التخزين. أسرع من لنقل بين الفروع. git commit --fixup مذكرة سريعة لـ git stash
تخزين التغييرات المُراقبة (الشكل المختصر:
| أوامر | ما تفعله |
|---|---|
git stash push | أضف الملفات غير المُراقبة git stash) |
git stash push -u | تخزينه باسم وصفية |
git stash push -m "name" | الملفات غير المُراقبة والاسم (النوع الذي ستستخدمه غالبًا) |
git stash push -u -m "name" | التخزين الجزئي التفاعلي (بمُقاطعات) |
git stash push -p | عرض جميع التخزينات |
git stash list | ملخص للملفات المُعدَّلة في التخزين |
git stash show stash@{N} | الفرق الكامل للتخزين |
git stash show -p stash@{N} | تطبيق التخزين، واحتفظ بالسجل |
git stash apply stash@{N} | تطبيق التخزين الأحدث، وحذف السجل |
git stash pop | حذف سجل التخزين المحدد |
git stash drop stash@{N} | حذف جميع سجلات التخزين |
git stash clear | إنشاء فرع جديد من التخزين وتطبيقه |
git stash branch <branchname> | مخرج الفرع للتخزين |
أوامر إضافية واحدة يجب معرفتها:
. هذا يُنشئ فرعًا جديدًا عند التسجيل الذي قمت بتخزينه، ويُطبق التخزين، ويُحذف إذا كان التطبيق نظيفًا. هو الخيار الصحيح عندما أصبحت التغييرات المخزنة كبيرة جدًا بحيث تستحق فرعًا منفصلًا — ويتغلب على مشكلة التعارض تمامًا لأنك تُعيد تطبيق التخزين على نفس الملف الذي جاء منه. git stash branch <branchname>العادة التي تُعالج 90% من ألم التخزين: اعطِ كل شيء اسمًا باستخدام
، واستخدم -mحتى تتأكد من أن التغييرات دخلت بشكل نظيف. الخط الإضافي apply بدلاً من pop يكلف ثانيتين. فقدان التخزين الذي كنت بحاجة إليه يكلف أكثر. drop git stash — أكثر من مجرد حفظ في حالة الإثارة (التخزين الجزئي، التخزين المُسمى، والباقي) 2
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
