لاستعادة ملف واحد من الـ stash على نظام macOS، استخدم git restore مع تحديد الـ stash كمصدر له ومسار الملف كهدف. يؤدي هذا إلى استعادة ذلك الملف في شجرة العمل الخاصة بك مع الإبقاء على إدخال الـ stash متاحًا. حدد أولاً الـ stash المناسب وتفقد تغييراته؛ ثم استعد المسار المحدد وراجع النتيجة.
1. افتح Terminal في المستودع
افتح Terminal من Spotlight أو من مجلد Applications/Utilities في Finder، ثم انتقل إلى دليل المستودع باستخدام cd. على سبيل المثال، اكتب cd ، واسحب مجلد المشروع إلى نافذة Terminal لإدراج مساره، ثم اضغط على Return. توضح وثائق Apple أن Terminal هو واجهة سطر الأوامر لنظام macOS؛ ويُعد zsh هو غلاف الأوامر (shell) الافتراضي له، على الرغم من أن المسؤول أو المستخدم يمكنه تكوين غلاف آخر. فتح تطبيق Terminal أو إنهاؤه على الـ Mac
تأكد من أنك في المستودع المقصود واطلع على التغييرات المحلية قبل استعادة أي شيء:
git status --short
يمكن أن تؤدي الاستعادة من الـ stash إلى استبدال المحتويات الحالية للملف الهدف في شجرة العمل، لذا احفظ أو أودع (commit) أي تعديلات على ذلك الملف تحتاج إلى الاحتفاظ بها. هذه العملية انتقائية حسب المسار، ولكنها ليست دمجًا (merge) أو نسخة احتياطية آمنة.
2. ابحث عن الـ stash وافحصه
اعرض قائمة بالإدخالات المتاحة:
git stash list
يصنف Git أحدث إدخال باسم stash@{0}، والتالي باسم stash@{1}، وهكذا. اختر الإدخال الذي يحتوي على الإصدار الذي تريده. إذا كانت الأوصاف غير واضحة، فافحص الإدخال المرشح كرقعة (patch):
git stash show --patch 'stash@{0}'
استبدل stash@{0} بالإدخال الذي حددته. يُعد وضع المرجع بين علامات اقتباس مفيدًا في zsh لأن الأقواس المعقوفة لها دلالة نحوية في هذا الغلاف. تشير وثائق Git إلى استخدام stash show لفحص الـ stash واستخدام stash apply لتطبيق إدخال كامل؛ بينما يحدد الأمر أدناه بدلاً من ذلك مسارًا واحدًا من اللقطة المحفوظة في الـ stash. وثائق git-stash
3. استعادة الملف فقط
قم بتشغيل git restore مع وضع مرجع الـ stash كمصدر والمسار المرتبط بالمستودع بعد --:
git restore --source='stash@{0}' -- 'src/config.json'
استبدل src/config.json بالمسار الدقيق الذي تحتاجه، باستخدام الشرطات المائلة للأمام وكتابته بالنسبة إلى جذر المستودع. تمنع علامات الاقتباس أيضًا تفسير المسافات والأحرف البديلة (wildcards) من قِبل غلاف الأوامر. يحدد الخيار --source التزامًا (commit) أو شجرة كمصدر للمحتوى؛ بينما يحدد محدد المسار (pathspec) المسار الذي يستعيده Git. نظرًا لحذف --staged، يستعيد Git شجرة العمل ويترك الفهرس (index) كما هو دون تعديل. وثائق git-restore
الآن راجع التغيير:
git status --short
git diff -- 'src/config.json'
الإصدار المستعاد هو تغيير غير مدرج في مرحلة التجهيز (unstaged) في شجرة العمل بالنسبة إلى الفهرس في الحالة العادية. إذا كان الملف مجهزًا (staged) من قبل، فقارن بين نسختي شجرة العمل والفهرس بتأنٍ قبل التجهيز أو الإيداع. يظل الـ stash في قائمة الـ stash لأن git restore يقرأ منه دون تطبيق الإدخال بأكمله أو إزالته.
متى يحتاج سير العمل هذا إلى تعديل
يجب أن يكون المسار موجودًا في لقطة شجرة العمل الخاصة بالـ stash. إذا لم يكن كذلك، فقد يفيد Git بأن محدد المسار لم يتطابق؛ تحقق من الرقعة واسم الملف، بما في ذلك حالة الأحرف الكبيرة والصغيرة. قد تتم إزالة المسار المتتبع الغائب عن شجرة المصدر لجعل الهدف مطابقًا لتلك الشجرة، لذا كن حذرًا بشكل خاص إذا كان الـ stash يسجل عملية حذف. تصف وثائق restore في Git هذا السلوك. وثائق git-restore
هذه الطريقة مخصصة لملف ممثل في لقطة شجرة العمل المتتبعة للـ stash. يمكن أن تحتوي الـ stashes التي تم إنشاؤها باستخدام -u أو -a أيضًا على ملفات غير متتبعة أو تم تجاهلها، ويتم تخزينها بشكل منفصل؛ لا يتعامل git restore --source='stash@{0}' مع تلك اللقطة المنفصلة كما لو كانت شجرة الـ stash الرئيسية. افحص هذه الإدخالات بعناية واستخدم عناصر التحكم الموثقة في Git لفحص الـ stash واسترداده بدلاً من افتراض أن هذا الأمر سيسترجعها. وثائق git-stash
إذا كان الهدف هو تطبيق أسطر محددة بدلاً من الملف بأكمله، فإن git restore -p يوفر إمكانية التحديد التفاعلي للأجزاء (hunks)، ولكن تأكد من السلوك والمصدر لإصدار Git المثبت لديك قبل الاعتماد عليه. لاستعادة كل من نسختي الملف المجهزة وفي شجرة العمل، يدعم git restore كلا الخيارين --staged و --worktree؛ يؤدي هذا إلى تغيير الفهرس أيضًا، لذا لا تستخدمه إلا إذا كان ذلك مقصودًا. وثائق git-restore
التسلسل العملي هو: تحديد الـ stash، وتأكيد وجود الملف في محتوياته، واستعادة مسار واحد مرتبط بالمستودع من الـ stash المختار، وفحص الفروق (diff) قبل المتابعة. يحافظ ذلك على بقاء الـ stash سليمًا ويقصر عملية الاستعادة على المسار الذي حددته.
المصادر
وثائق git-stash — Git
وثائق git-restore — Git
فتح تطبيق Terminal أو إنهاؤه على الـ Mac — دعم Apple