كيف يمكنني استخراج ملف واحد (أو تغييرات إلى ملف) من مخبأ بوابة؟

StackOverflow https://stackoverflow.com/questions/1105253

  •  12-09-2019
  •  | 
  •  

سؤال

أود أن أعرف ما إذا كان من الممكن استخراج ملف واحد أو فرق من ملف من Stash Git دون إيقاف تشغيل Changeset Stash.

قد يكون أي شخص قادر على تقديم بعض الاقتراحات / الأفكار حول هذا الموضوع؟

هل كانت مفيدة؟

المحلول

على ال بوابة الخبث ManPage يمكنك قراءة (في قسم "المناقشة"، فقط بعد "الخيارات" الوصف) أن:

يتم تمثيل الخبث كإجراء يسجل شجاره حالة دليل العمل، والوالد الأول هو الالتزام في الرأس عند إنشاء الخبأ.

حتى تتمكن من علاج الخبأ (على سبيل المثال stash@{0} هو الأولى / أعلى الخبث) كدمج الالتزام، واستخدام:

$ git diff stash@{0}^1 stash@{0} -- <filename>

تفسير: stash@{0}^1 يعني أول الوالد من الخبث المحدد، الذي كما هو مذكور في التفسير أعلاه هو الالتزام الذي تم تغيير التغييرات. نحن نستخدم هذا النوع من "فرق الجبت" (مع ارتكاب اثنين) ل stash@{0} / refs/stash هو ارتكاب دمج، وعلينا أن نقول جيت أي الوالد الذي نريد أن نفاده ضده. المزيد من الخفف:

$ git diff stash@{0}^! -- <filename>

يجب أن تعمل أيضا (انظر جيت المراجعة manpage لتفسير rev^! بناء جملة، في قسم "تحديد النطاقات").

وبالمثل، يمكنك استخدام جيط الخروج للتحقق من ملف واحد من Stash:

$ git checkout stash@{0} -- <filename>

أو لحفظها تحت اسم ملف آخر:

$ git show stash@{0}:<full filename>  >  <newfile>

أو

$ git show stash@{0}:./<relative filename> > <newfile>

(ملاحظة أن هناu003Cfull filename> هو اسم المسار الكامل للملف نسبة إلى الأعلى دليل للمشروع (التفكير: بالنسبة إلى stash@{0})).


قد تحتاج إلى حماية stash@{0} من توسيع شل، أي استخدام "stash@{0}" أو 'stash@{0}'.

نصائح أخرى

كما ترى git stash apply بدلا من git stash pop, ، سوف يطبق الخبث لشجرة العمل الخاصة بك ولكن لا يزال يحتفظ بالخبأ.

مع هذا القيام به، يمكنك add/commit الملف الذي تريده ثم إعادة تعيين التغييرات المتبقية.

اجابة قصيرة

لرؤية الملف بأكمله: git show stash@{0}:<filename>

لرؤية فرق: git diff stash@{0}^1 stash@{0} -- <filename>

هناك طريقة سهلة للحصول على تغييرات من أي فرع، بما في ذلك Stashes:

$ git checkout --patch stash@{0} path/to/file

قد تحذف المواصفات الملف إذا كنت ترغب في التصحيح في أجزاء كثيرة. أو حذف التصحيح (ولكن ليس المسار) للحصول على جميع التغييرات في ملف واحد. يستبدل 0 مع رقم Stash من git stash list, ، إذا كان لديك أكثر من واحد. لاحظ أن هذا يشبه diff, ، وتقدم التقدم الكل الاختلافات بين الفروع. للحصول على تغييرات من ارتكاب / خبأ واحد فقط، إلقاء نظرة على git cherry-pick --no-commit.

$ git checkout stash@{0} -- <filename>

ملاحظات:

  1. تأكد أنك وضع الفضاء بعد "-" ومعلمة اسم الملف

  2. استبدل صفر (0) مع رقم Stash الخاص بك المحدد. للحصول على قائمة Stash، استخدم:

    git stash list
    

مرتكز على إجابة jakub narębski - نسخة أقصر

يمكنك الحصول على فرق ل Stash مع "git show stash@{0}"(أو أيا كان عدد الخبأ هو؛ راجع" قائمة مخبأ "). من السهل استخراج قسم الفرق لملف واحد.

أبسط مفهوم لفهم، على الرغم من أنه ربما لا يكون الأفضل، فهل لديك ثلاثة ملفات تغيرت وتريد تخفيف ملف واحد.

اذا فعلت git stash لتخزينهم جميعا، git stash apply لإعادتها مرة أخرى ثم git checkout f.c في الملف المعني لإعادة ضبطه بشكل فعال.

عندما تريد إيقاظ هذا الملف تشغيل القيام git reset --hard ثم يدير git stash apply مرة أخرى، والاستفادة من حقيقة ذلك git stash apply لا يخلص فرق من مكدس الخباز.

إذا كانت الملفات المخففة تحتاج إلى دمج الإصدار الحالي، فافعل الطرق السابقة باستخدام Diff. خلاف ذلك قد تستخدم git pop لإسحقهم، git add fileWantToKeep لتراجع الملف الخاص بك، والقيام git stash save --keep-index, ، لتقشيم كل شيء باستثناء ما هو على خشبة المسرح. تذكر أن الفرق في هذه الطريقة مع تلك السابقة هو أنه "ينبثق" الملف من Stash. الإجابات السابقة احتفظ بها git checkout stash@{0} -- <filename> لذلك يذهب وفقا لاحتياجاتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top