সংযুক্ত ফাইলগুলি ওভাররাইট করতে গিট স্ট্যাশকে বাধ্য করুন


223

আমার কাছে কিছু ফাইল রয়েছে যা গিটকে ছাড়াই ছিল। আমি কিছু পরিবর্তন করেছি এবং সেগুলি প্রতিশ্রুতিবদ্ধ করতে চেয়েছিলাম, তবে বুঝতে পেরেছিলাম যে আমি প্রথমে অশোধিত ফাইলগুলি পরীক্ষা করতে ভুলে গিয়েছি। সুতরাং আমি ফাইলগুলি স্ট্যাশ করেছিলাম, তারপরে অবিস্মরণীয় সংস্করণগুলি যুক্ত করেছি।

তারপরে আমি স্ট্যাশগুলিকে সংগ্রহস্থলে প্রয়োগ করি, ফাইলগুলি ইতিমধ্যে যুক্ত হয়ে যাওয়ার কারণে আমি বিবাদ পেতে পারি।

আমি কীভাবে স্ট্যাশ প্রয়োগ করতে পারি, এবং স্ট্যাশ-এর ​​সংস্করণগুলিকে সংগ্রহস্থলের মূলগুলির তুলনায় ব্যবহার করতে বাধ্য করব?

ধন্যবাদ


7
কুৎসিত সমাধান যতক্ষণ না কেউ এর থেকে ভাল হিসাবে আসে: করার git rmআগে নতুন ফাইলগুলি সরিয়ে ফেলুন git stash apply
টম

ইতিহাস কি হারাবে না? অপরিবর্তিত সংস্করণ যুক্ত করার কারণ ছিল ইতিহাস রক্ষা করা।
স্টিফান

1
না, এটি ইতিহাস হারাবে না। যদি আপনি কোনও ফাইল অপসারণ করেন তবে এটিকে একটি ছোট সংশোধন করে আবার যুক্ত করুন এবং তারপরে প্রতিশ্রুতিবদ্ধ করুন, gitএটি কেবল একটি ছোট্ট পরিবর্তন হিসাবে বিবেচনা করবে।
টম

উত্তর:


364

এর git checkoutপরিবর্তে ব্যবহার করুন git stash apply:

$ git checkout stash -- .
$ git commit

এটি বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইলকে তাদের স্ট্যাশ করা সংস্করণে পুনরুদ্ধার করবে।


ওয়ার্কিং ডিরেক্টরিতে থাকা অন্য ফাইলগুলিতে যদি পরিবর্তন করা হয় যা রাখা উচিত, এখানে কম ভারী হাতের বিকল্প রয়েছে:

$ git merge --squash --strategy-option=theirs stash

যদি সূচকে পরিবর্তন হয়, বা স্থানীয় পরিবর্তনের সাথে একত্রীকরণ ফাইলগুলিকে স্পর্শ করবে, গিটটি মার্জ করতে অস্বীকার করবে। পৃথক ফাইলগুলি স্ট্যাশ ব্যবহার করে চেক আউট করা যেতে পারে

$ git checkout stash -- <paths...>

বা ইন্টারেক্টিভ সাথে

$ git checkout -p stash

এগুলির কোনওটিই আমার ব্যবহারের ক্ষেত্রে কাজ করেনি। ফলাফল এবং আমার সমাধান এখানে আছেন stackoverflow.com/a/26685296/496046 - এই আপনার অবস্থা খুব @AlexanderBird সমাধান করা উচিত,
tremby

2
git checkout stash -- .এই কমান্ডটি আক্ষরিকভাবে কিছুই করেনি যখন আমি এটি চালাচ্ছিলাম।
Rotsiser Mho

3
নিশ্চিত করুন আপনি কি নিশ্চিত যে এটি কিছুই করেনি? আমার জন্য ভাল কাজ করে।
সিংজাই

5
আমাকে git checkout stash -- .সর্বাধিক প্যারেন্ট ফোল্ডারে চালাতে হয়েছিল যাতে আমার পরিবর্তনগুলি অন্তর্ভুক্ত ছিল, অন্যথায় এটি কেবলমাত্র যেখানেই আমি কমান্ডটি চালিয়েছিলাম সেই ফোল্ডারে পরিবর্তনগুলি প্রয়োগ করেছিল।
লিও

1
@ লিও: এটা ঠিক, কারণ .এটি বর্তমান ডিরেক্টরিটি নির্দিষ্ট করে (আপনি ডিরেক্টরিটি পরিবর্তনের পরিবর্তে এটি অন্য কোনও পথ দিয়ে প্রতিস্থাপন করতে পারেন)। আমি আরও পরিষ্কার করার জন্য আমার উত্তর আপডেট করেছি।
টম

13

git stash show -p | git apply

এবং তারপরে git stash dropআপনি স্ট্যাশড আইটেমগুলি ফেলে দিতে চান।


2
নোট: আপনি এই জন্য সংগ্রহস্থলের সঠিকভাবে কাজ করার মূল হওয়া উচিত, অন্যথায় আপনি পাবেন এই
Ruslan

@ পেঙ্গেজেং যেমন আপনি দেখতে পাচ্ছেন নেট নেটম্যানুয়েল থেকে প্রায় এক বছর আগে আমি উত্তর দিয়েছি
হাসান টিবিটি

@ রুসলান আমি আমার রেপোতে থাকাকালীন তা পেয়ে যাচ্ছি 🤔
লিও

6

git stash popএই কমান্ড জোর করে চালানো

git stash show -p | git apply && git stash drop

1

টি এল; ডিআর:

git checkout HEAD path/to/file
git stash apply

দীর্ঘ সংস্করণ:

আপনি এই ত্রুটিটি পেয়েছেন কারণ আপনি যে অনাকাঙ্ক্ষিত পরিবর্তনগুলি ওভাররাইট করতে চান তা হ'ল। এর সাথে এই পরিবর্তনগুলি পূর্বাবস্থায় ফেরান git checkout HEAD। আপনি একটি নির্দিষ্ট ফাইলের সাথে পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে নিতে পারেন git checkout HEAD path/to/file। দ্বন্দ্বের কারণটি সরিয়ে দেওয়ার পরে, আপনি যথারীতি আবেদন করতে পারেন।

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