দুর্ঘটনাজনিত গিট স্ট্যাশ পপ পূর্বাবস্থায় ফেলা হচ্ছে


186

আমি একটি জটিল মার্জ করার আগে কিছু স্থানীয় পরিবর্তনকে স্তব্ধ করে দিয়েছি, সংযুক্তিটি করেছি, তারপরে বোকামি চালানোর আগে প্রতিশ্রুতি দিতে ভুলে গেছি git stash pop। পপটি কিছু সমস্যা তৈরি করেছে (একটি বড় কোডবেজে খারাপ পদ্ধতি কলগুলি) যা ট্র্যাক করা শক্ত প্রমাণ করছে। আমি দৌড়েছি git stash show, তাই কমপক্ষে আমি জানি যে কোন ফাইলগুলি পরিবর্তন করা হয়েছিল। অন্য কিছু না হলে, আমি অনুমান করি যে এটি আরও প্রতিশ্রুতিবদ্ধ lesson

আমার প্রশ্ন: একীভূতিকে পূর্বাবস্থায় ফেলা ছাড়া স্ট্যাশ পপটি কী পূর্বাবস্থায় ফেলা সম্ভব?


2
আপনাকে git stash popপ্রথমে প্রতিশ্রুতি না দিয়ে অনুমতি দেওয়া হবে না বলে মনে করা হচ্ছে । তা অর্জনে আপনি কী করেছেন?
ক্রিস জেস্টার-ইয়াং

সত্যনিষ্ঠ হওয়ার বিষয়টি নিশ্চিত নয় (এটি গতকাল ছিল)। সংশ্লেষটি ছিল বলে মার্জটি নিজেই প্রতিশ্রুতিবদ্ধ হয়নি। এর পরে আমি কোনওভাবে স্ট্যাশ পপ চালাতে সক্ষম হয়েছি।
নরেন

1
আমি এটি কেবল গিট সংস্করণ 1.7.9.msysgit.0 ব্যবহার করে জানি। আমি unstaged ফাইল এবং লুকোবার জায়গা মাত্র মার্জ সবকিছু পপ ছিল।
PandaWood

আমি git stash popপরিবর্তনগুলি পর্যায়ক্রমে চালাতে সক্ষম হয়েছি (যদিও আমি এটি প্রতিশ্রুতি করি না) গিটারের ২.২৫.০. উইন্ডোজ ১ সংস্করণ দিয়ে
আর্টেম হেভেরিয়ান ian

যদি আপনি নিজের পরিবর্তনগুলি সূচিবদ্ধ করেনstash pop/apply এবং প্রতিশ্রুতি দেওয়ার আগে দৌড়ানোর সময় সেগুলি হারিয়ে ফেলেন তবে আপনি গুলি চালাতে পারেন git fsck --lost-found। এই কমান্ডটি ঝোলা ব্লবগুলি (গিট টার্মোলজির সাথে পরিচিত না তাদের জন্য প্রকৃত ফাইলগুলি) পুনরুত্থিত হবে যা মঞ্চস্থ হয়েছিল তবে কোথাও প্রতিশ্রুতিবদ্ধ ছিল না (সুতরাং ঝুঁকছে ) এবং সেগুলিকে .git / হারিয়ে-পাওয়া / ডিরেক্টরিতে রাখবে , যেখানে আপনি git showসেগুলি দেখতে পারেন এবং দেখতে পারেন আপনি যদি সন্ধান করছেন এমন ফাইলগুলি যদি এই হয়।
আর্টেম হেভোরহিয়ান

উত্তর:


69

গিটে একটি বাদ পড়া স্ট্যাশ কীভাবে পুনরুদ্ধার করবেন তা ব্যবহার করে দেখুন ? আপনি পপ স্ট্যাশ খুঁজে পেতে। আমি মনে করি স্ট্যাশের জন্য সর্বদা দুটি কমিট থাকে, যেহেতু এটি সূচক এবং কার্যকরী অনুলিপি সংরক্ষণ করে (তাই প্রায়শই সূচকের অঙ্গীকার খালি হবে) be তারপরে git showতাদের পার্থক্যটি দেখতে এবং patch -Rএগুলি প্রয়োগ করতে ব্যবহার করুন।


6
বাহ যে কাজ। আমি git fsck --no-reflog | awk '/dangling commit/ {print $3}'(লিঙ্কটি থেকে) স্ট্যাশ প্রতিশ্রুতিগুলি সন্ধান করতে সক্ষম হয়েছি এবং আমি নিজেই সেই ডিফ থেকে সমস্যাটি পেয়েছি। ধন্যবাদ!
নরেন

1
fsck একটি বিশাল তালিকা আউটপুট করে। এখানে প্রতিটি SHA1 দেখানো গম্ভীর। তুমি এটা কিভাবে করো ?
মেসন 10

5
@ মেসন ১০: দুর্ভাগ্যক্রমে স্ট্যাশগুলি একটি রিফ্লোগে রাখা হয়েছে, এটি পপড স্ট্যাশগুলির ইতিহাসটি দেখার সুস্পষ্ট উপায় (যদি তারা সত্যিকারের শাখা হত)। এছাড়াও আমাকে পরামর্শ দিন যে ডাউনওয়েট + সাহায্যের জন্য অনুরোধ সেরা কৌশল নয়।
বেন জ্যাকসন

2
এটি সঠিক হয়ে উঠতে আমাকে কিছুটা সময় লাগল। এখানে আমার কাজের ফলাফল: git diff -p ${STACH_SHA1}~1 ${STASH_SHA1} | patch -R -p1; আমি git showপ্রস্তাবিত হিসাবে চেষ্টা করেছি তবে এর আউটপুট প্যাচের পক্ষে ভাল ছিল না; এছাড়াও ফাইলগুলির সামনে রাখে এমন উপাদান এবং উপাদানটি -p1ফেলার জন্য আমাকে প্যাচ করার বিকল্পটি সরবরাহ করতে হবে অন্যথায় এটি সংগ্রহস্থল মূল থেকে পাথগুলি সমাধান করবে না। পরামর্শ: সতর্কতা অবলম্বন করুন এবং প্যাচ নিয়ে খেলার আগে একটি পৃথক শাখায় গোলযোগ করুন। a/..b/..git diff
বাসিলিকোড

@ বেনজ্যাকসন আপনার উত্তরে "সর্বদা" উভয়ই অর্থ stash popএবং stash pushএমন একটি প্রতিশ্রুতি ট্রিগার করবে যা সূচি এবং কার্যনির্বাহী ডিরেক্টরিতে পরিবর্তনগুলি সংরক্ষণ করবে, তাই না?
আর্টেম হেভোরহিয়ান

36

থেকে git stash --help

Recovering stashes that were cleared/dropped erroneously
   If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
   following incantation to get a list of stashes that are still in your repository, but not reachable any more:

       git fsck --unreachable |
       grep commit | cut -d\  -f3 |
       xargs git log --merges --no-walk --grep=WIP

এটি একই দৃশ্যের সাথে স্বীকৃত উত্তরের চেয়ে আমাকে আরও ভালভাবে সহায়তা করেছে।


13
নোট করুন যে "ডাব্লুআইপি" অনুসন্ধানে জড়িত অনেকগুলি সমাধান ডিফল্ট স্ট্যাশ বার্তাগুলির উপর নির্ভর করে। যদি আপনি আপনার স্ট্যাশগুলি সুস্পষ্ট বার্তা দেন তবে সেগুলিতে ডাব্লুআইপি নাও থাকতে পারে।
বেন জ্যাকসন

ধন্যবাদ। আমি পঠনযোগ্যতা উন্নত করতে লগ কমান্ডে - অনলাইনলাইন বিকল্পটি যুক্ত করেছি।
বাস্লো

এটি আপনাকে কেবল স্ট্যাশ কমিটের এসএইচএ খুঁজতে সহায়তা করে। তবে গৃহীত উত্তরের (গিট ডিফার এসএএএইচ ~ 1 এসএএএ | প্যাচ -আর) থেকে @ বাসিলিকোড মন্তব্যের সাথে একত্রিত হলে, এটি দুর্দান্ত কাজ করে। আমি চেক করতে প্রথমে পথ - শুকনো রান ব্যবহার করার পরামর্শ দিই।
জারেক সি

3

আপনার মার্জটি খুব জটিল না হলে অন্য বিকল্পটি হ'ল:

  1. "গিট স্ট্যাশ" ব্যবহার করে মার্জ পরিবর্তনগুলি সহ সমস্ত পরিবর্তনগুলি আবার স্ট্যাশে ফিরিয়ে আনুন
  2. আবার মার্জ চালান এবং আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ (বাদ দেওয়া স্ট্যাশ থেকে পরিবর্তনগুলি ছাড়াই)
  3. একটি "গিট স্ট্যাশ পপ" চালান যা আপনার আগের মার্জ থেকে সমস্ত পরিবর্তনগুলি উপেক্ষা করা উচিত কারণ ফাইলগুলি এখন অভিন্ন।

এরপরে আপনি খুব তাড়াতাড়ি বাদ পড়েছেন এমন স্ট্যাশ থেকে পরিবর্তনগুলি নিয়েই আপনি রয়ে গেছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.