উত্তর:
যখন আমাকে কোনও নোংরা ওয়ার্কিং কপিতে স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করতে হবে, উদাহরণস্বরূপ স্ট্যাশ থেকে একাধিক চেঞ্জসেট পপ করুন, আমি নিম্নলিখিতটি ব্যবহার করি:
$ git stash show -p | git apply -3 && git stash drop
মূলত এটি
আমি ভাবছি কেন এমন কোনও -f
(বল) বিকল্প নেই git stash pop
যার জন্য উপরের ওয়ান-লাইনের মতো ঠিক আচরণ করা উচিত।
ইতিমধ্যে আপনি এই ওয়ান-লাইনারকে গিট ওরফে হিসাবে যুক্ত করতে চাইতে পারেন:
$ git config --global --replace-all alias.unstash \
'!git stash show -p | git apply -3 && git stash drop'
$ git unstash
@ সামহ্যাসলারকে -3
প্যারামিটারটি নির্দেশ করার জন্য ধন্যবাদ যা 3-উপায় মার্জয়ের মাধ্যমে বিরোধগুলি সরাসরি সমাধান করতে দেয়।
git stash apply
আপনার যদি নোংরা কাজের অনুলিপি থাকে তবে স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করবেন না। সুতরাং আপনি দেখতে পাচ্ছেন git stash show -p | git apply
যে কোনও ধরণের জোর করে স্ট্যাশ প্রয়োগ করা হচ্ছে।
error: <file> does not match index
প্রতিটি পরিবর্তিত ফাইলের জন্য ব্যর্থ হয়েছিল। তবে, আরও একটি সমাধান কাজ করেছে।
আমি এটি এইভাবে করি:
git add -A
git stash apply
এবং তারপরে (alyচ্ছিক):
git reset
git add -u
, যা -A
এটির তালিকা ছাড়াই থাকা ফাইলগুলি যুক্ত না করে।
আপনি প্যাচ ফাইল হিসাবে নিজের স্ট্যাশটি রফতানি করে এবং ম্যানুয়ালি প্রয়োগ করে আপনার বর্তমান পরিবর্তনগুলি স্ট্যাশ না করে এটি করতে পারেন।
উদাহরণস্বরূপ, বলুন যে আপনি কোনও নোংরা গাছে স্ট্যাশ @ {0} প্রয়োগ করতে চান:
প্যাচ হিসাবে স্ট্যাশ @ {0 port রফতানি করুন:
গিট স্ট্যাশ শো -p স্ট্যাশ @ {0}> Stash0.patch
পরিবর্তনগুলি ম্যানুয়ালি প্রয়োগ করুন:
গিট আবেদন Stash0.patch
যদি দ্বিতীয় পদক্ষেপ ব্যর্থ হয় তবে কোনও ত্রুটি সমাধানের জন্য আপনাকে Stash0.patch ফাইলটি সম্পাদনা করতে হবে এবং তারপরে আবার গিট প্রয়োগের চেষ্টা করতে হবে।
হয় গিট রিসেট দিয়ে আপনার ওয়ার্কিং ডিরেক্টরিটি পরিষ্কার করুন, পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন বা আপনি যদি বর্তমান পরিবর্তনগুলি স্ট্যাশ করতে চান তবে চেষ্টা করুন:
current গিট স্ট্যাশ "বর্তমান পরিবর্তনের বর্ণনা" সংরক্ষণ করে it গিট স্ট্যাশ পপ স্ট্যাশ @ {1}
এটি বর্তমান পরিবর্তনগুলি স্ট্যাশ করবে এবং তারপরে স্ট্যাশ স্ট্যাক থেকে দ্বিতীয় স্ট্যাশকে পপ করবে।
ম্যাথিয়াসের সমাধানটি অবশ্যই গিট স্ট্যাশ পপ - ফোর্সের সবচেয়ে নিকটতম (এবং সত্যই, সিমন গিট দেবস, আসুন ইতিমধ্যে এই বিকল্পটি পান!)
তবে, আপনি যদি কেবল গিট কমান্ড ব্যবহার করে একই জিনিস করতে চান তবে আপনি এটি করতে পারেন:
অন্য কথায়, আপনার বর্তমান পরিবর্তনগুলির একটি প্রতিশ্রুতিবদ্ধ (যা আমরা কখনই ঠেকাব না) করুন। আপনার কর্মক্ষেত্রটি এখন পরিষ্কার, আপনার স্ট্যাশ পপ করুন। এখন, আপনার পূর্ববর্তী প্রতিশ্রুতি সংশোধন হিসাবে স্ট্যাশ পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ। আপনারা এখন একক প্রতিশ্রুতি ("ফিক্সমে") মিলিয়ে উভয় সেট পরিবর্তন করেছেন; শুধু পুনরায় সেট করুন (--সোফট না - আসলে কিছুই হারায় না) আপনার চেকআউটটি "সেই প্রতিশ্রুতি হওয়ার আগে একটিতে" পরিণত করুন এবং এখন আপনার উভয় পরিবর্তনের সেট রয়েছে, সম্পূর্ণ অনির্ধারিত।
** সম্পাদনা করুন * *
আমি ঠিক বুঝতে পেরেছি যে এটি আসলে আরও সহজ; আপনি সম্পূর্ণ পদক্ষেপ 3 এড়িয়ে যেতে পারেন, তাই ...
(বর্তমান পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন, স্ট্যাশড পরিবর্তনগুলি পপ অফ করুন, পুনরায় সেট করুন যা প্রথমে পুনরায় সেট করুন উভয় সেট পরিবর্তিত অবস্থায় স্থিতিশীল করার জন্য প্রতিশ্রুতিবদ্ধ))
আমি আজকের মতো করে নিজেকে এই পরিস্থিতিতে যদি নিজেকে খুঁজে পাই তবে এই উত্তরগুলির কোনওটিই বাস্তবে কাজ করে না। কত তথাপি git reset --hard
's আমি, আমার কোথাও না পেয়েছিলাম। আমার উত্তর (কোনও উপায়ে অফিসিয়াল ছিল না):
git reflog --all
আমি ম্যাথিয়াস লেপ্পিশের দুর্দান্ত কাজ করার সমাধানও পেয়েছি সুতরাং আমি এটির জন্য আমার বিশ্বব্যাপী .gitconfig এর জন্য একটি উপনাম যুক্ত করেছি
[alias]
apply-stash-to-dirty-working-tree = !git stash show -p | git apply && git stash drop
এখন আমি টাইপ করতে পারি
git apply-stash-to-dirty-working-tree
যা আমার পক্ষে দুর্দান্ত কাজ করে।
(আপনার মাইলেজটি এই দীর্ঘ উপনামের নাম অনুসারে আলাদা হতে পারে But
আপনি যে git add
কোনও পরিবর্তন করেছেন সেভাবে গাছ পরিষ্কার করে "নোংরা" গাছে একটি স্ট্যাশ প্রয়োগ করতে পারেন । তারপরে আপনি git stash pop
স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করতে পারেন এবং কোনও সমস্যা নেই।
আপনার কাছে এমন ফাইল রয়েছে যা সংশোধিত হয়েছে তবে প্রতিশ্রুতিবদ্ধ নয়। উভয় ক্ষেত্রেই:
git reset --hard HEAD (to bring everything back to HEAD)
বা, আপনি যদি নিজের পরিবর্তনগুলি সংরক্ষণ করতে চান:
git checkout -b new_branch
git add ...
git commit
git checkout -b old_branch
git stash pop
আমারও একই সমস্যা ছিল কিন্তু গিটের শূন্য পরিবর্তিত ফাইল ছিল। দেখা যাচ্ছে আমার কাছে একটি ইনডেক্স.লক ফাইল ছিল যা প্রায় পড়ে ছিল। এটি মুছে ফেলা সমস্যার সমাধান করে।
আমি এগুলির বেশিরভাগ কাজ করতে পারিনি; কোনও কারণে এটি সর্বদা মনে করে যে আমার কোনও ফাইলে স্থানীয় পরিবর্তন আছে। আমি কোনও স্ট্যাশ প্রয়োগ করতে পারি না, প্যাচগুলি প্রয়োগ হবে না checkout
এবং reset --hard
ব্যর্থ হবে। অবশেষে যা কাজ করেছিল তা হ'ল স্ট্যাশকে একটি শাখা হিসাবে সংরক্ষণ করা git stash branch tempbranchname
এবং তার পরে একটি সাধারণ শাখা মার্জ করা: git checkout master
এবং git merge tempbranchname
। Http://git-scm.com/book/en/Git- টুলস- স্ট্যাশিং থেকে :
যদি আপনি স্ট্যাশড পরিবর্তনগুলি আবার পরীক্ষা করার সহজ উপায় চান তবে আপনি গিট স্ট্যাশ শাখা পরিচালনা করতে পারেন যা আপনার জন্য একটি নতুন শাখা তৈরি করে, আপনি যখন আপনার কাজটি স্তব্ধ করেছিলেন তখন আপনি যে প্রতিশ্রুতিটি করেছিলেন তা পরীক্ষা করে, সেখানে আপনার কাজটি পুনরায় প্রয়োগ করে এবং তারপরে ড্রপগুলি ফেলে দেয় এটি সফলভাবে প্রযোজ্য হলে স্ট্যাশ
git stash show -p | git apply
চেয়ে আলাদা কিgit stash apply
?