মাস্টার শাখায় পরিবর্তন করার সময় ত্রুটি: আমার স্থানীয় পরিবর্তনগুলি চেকআউট দ্বারা ওভাররাইট করা হবে


127

এই প্রশ্নের অনুরূপ এই এক , কিন্তু আরো নির্দিষ্ট।

আমার দুটি শাখা ( stagingএবং beta) নিয়ে একটি প্রকল্প রয়েছে ।

আমি বিকাশ করেছি stagingএবং masterবাগগুলি ঠিক করতে শাখাটি ব্যবহার করি । সুতরাং যদি আমি মঞ্চে কাজ করছি এবং আমি একটি ত্রুটি দেখতে পাচ্ছি তবে আমি masterশাখায় পরিবর্তন করব :

git checkout master

এবং জিনিসগুলি:

git add fileToAdd
git commit -m "bug fixed"

এবং তারপরে আমি উভয় শাখায় একত্রিত হয়েছি:

git checkout staging
git merge master
git checkout beta
git merge beta

এবং কার্যকারী গাছটিতে অন্য ফাইল রয়েছে কিনা তা বিবেচ্য নয়।

তবে এখন, আমি যখন masterশাখায় পরিবর্তন করার চেষ্টা করব তখন আমি একটি ত্রুটি পাচ্ছি :

error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting

আমি ভেবেছিলাম স্টেজিং অঞ্চল থেকে আমার ফাইলটি সরানো উচিত:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php

কিন্তু আমি একই ত্রুটি পাচ্ছি। তাহলে আমি কি git statusআমি পেতেNo changes to commit


4
আপনি চেষ্টা করেছেন reset --hard? আপনি যদি সত্যিই নিশ্চিত হন যে আপনি নিজের পরিবর্তনগুলি বাতিল করতে চান। অথবা আপনি যদি তা না করেন তবে স্ট্যাশ ব্যবহার করুন।
কেলিটার

@ কেলেটার - না। আমি আমার পরিবর্তনগুলি বাতিল করতে চাই না। পরবর্তী প্রতিশ্রুতির জন্য কেবল তাদেরকে কার্যকারী গাছের উপরে রাখুন
মানোলো

1
আমি মনে করি না যে আপনি আপত্তিহীন পরিবর্তনগুলি রেখে শাখাগুলি স্যুইচ করতে পারেন তবে আমি সহজেই ভুল হতে পারি - সত্যই আমার ক্ষেত্রটি নয়। চেষ্টা করুন git add your-fileএবং প্রতিশ্রুতিবদ্ধ।
কেল্টার

@ কেলেটার - আমি আগে এইভাবে কাজ করেছি। আমি stagingএখনই কোনও পরিবর্তন করতে চাই না ।
মানোলো

আপনি যখন এর আগে চেষ্টা করেছিলেন তখন আপনার বিরোধী ফাইলটি পরিবর্তন করা হয়নি। আপনার পরিবর্তন আছে, গিটকে এগুলি আবার কোথাও পুনরুদ্ধার করতে সেভ করতে হবে। কমিটমেন্ট ছাড়া এটি সম্ভব হওয়ার খুব সম্ভাবনা নেই is তবে আপনি যদি সত্যিই চান না - স্ট্যাশ ব্যবহার করুন তবে এটি কেন বিদ্যমান।
কেলিটার

উত্তর:


128

আপনার ত্রুটিটি উপস্থিত হয় যখন আপনি কোনও ফাইল এবং আপনি যে শাখায় স্যুইচ করছেন সেটি এই ফাইলটির জন্যও পরিবর্তন হয়েছে (সর্বশেষ মার্জ পয়েন্ট থেকে)।

আপনার বিকল্পগুলি, যেমনটি আমি দেখছি, সেগুলি হ'ল - প্রতিশ্রুতিবদ্ধ এবং তারপরে অতিরিক্ত পরিবর্তন সহ এই কমিটটি সংশোধন করুন (যতক্ষণ না তারা সম্পাদনা করছেন ততক্ষণ আপনি গিমে কমিটগুলি সংশোধন করতে পারেন push); বা - স্ট্যাশ ব্যবহার করুন:

git stash save your-file-name
git checkout master
# do whatever you had to do with master
git checkout staging
git stash pop

git stash saveআপনার পরিবর্তনগুলি সমন্বিত স্ট্যাশ তৈরি করবে, তবে এটি কোনও প্রতিশ্রুতি বা এমনকি শাখার সাথে সম্পর্কিত নয়। git stash popসংরক্ষিত পরিবর্তনগুলি পুনরুদ্ধার করে এবং এটি স্ট্যাশ থেকে অপসারণ করে আপনার বর্তমান শাখায় সর্বশেষ স্ট্যাশ এন্ট্রি প্রয়োগ করবে।


3
ধন্যবাদ. আপনি কি নিশ্চিত যে এটি আমার কার্যকারী বৃক্ষের (কোনও ফাইল যুক্ত করা হয়নি) কোনও পরিবর্তন করবে না? আমি আমার পরিবর্তনগুলি আলগা করতে চাই না: - /
মানোলো

ওফস, ভুলভাবে টাইপ করা addযখন এটি আসলে save.. আপডেট হয়। মানে, অন্য ফাইলের জন্য? git stash saveফাইল নাম প্যারামিটার ব্যতীত সমস্ত পরিবর্তিত ফাইলগুলি সংরক্ষণ করবে, আপনি যদি চান (এবং সেগুলি সর্বশেষ-বহির্গমন স্থিতিতে ফিরিয়ে দিন)। এবং ডিরেক্টরি গাছের অতিরিক্ত অনুলিপি থাকা কখনও ব্যথা করে না, তবে আমি এটি সম্পর্কে সর্বদা বিরক্ত।
কেল্টার

আমি masterশাখায় যুক্ত করতে চাইলে জিনিসটি পরিবর্তিত সমস্ত ফাইল সংরক্ষণ করা হবে save এছাড়াও, একটি বিকল্প popঅন্যান্য শাখায় পরিবর্তন হতে পারে ?
মানোলো

আপনি কি বোঝাতে চাচ্ছেন তা আমি নিশ্চিত নই. হ্যাঁ, আপনি অন্য কোনও শাখায় স্ট্যাশ প্রয়োগ করতে পারেন, তবে এটি কেবল ফাইলের বিষয়বস্তুগুলিকে প্রতিস্থাপন করবে, সেগুলি মার্জ করবে না।
কেলটার

1
@ মধু শাখার সাথে এর কোনও যোগসূত্র নেই, সমস্যাটি অনিবার্য পরিবর্তন। সংজ্ঞা অনুসারে চেকআউটটি আপনার ফাইলগুলিকে পুনরায় স্থির করতে masterহবে তবে এটি করার ফলে এটি বর্তমান বিষয়বস্তু হারাবে এবং যেহেতু এই বিষয়বস্তু প্রতিশ্রুতিবদ্ধ নয় এটি পরে এই অবস্থায় ফিরে আসা অসম্ভব, তাই ত্রুটি তাই আপনি হারানো পরিবর্তনগুলি পরে বিরক্ত হবে না।
কেল্টার 15

150

আমি একই সমস্যার মুখোমুখি হয়েছি এবং এর দ্বারা সমাধান করেছি

git checkout -f branch

এবং এর স্পেসিফিকেশন বরং স্পষ্ট।

-ফ, - ফোর্স

শাখাগুলি স্যুইচ করার সময়, সূচী বা কার্যক্ষম গাছটি হ্যাড থেকে পৃথক হয়ে গেলেও এগিয়ে যান। এটি স্থানীয় পরিবর্তনগুলি ছুঁড়ে ফেলার জন্য ব্যবহৃত হয় ।

সূচক থেকে পাথগুলি পরীক্ষা করার সময়, নিমজ্জিত এন্ট্রিগুলিতে ব্যর্থ হবেন না; পরিবর্তে, নিমজ্জিত এন্ট্রি উপেক্ষা করা হয়।


7
যখন আমার গিটটি জ্যাম হয়ে গেছে (কোনও স্থানীয় পরিবর্তন নেই তবে এখনও সেই ত্রুটি), এই সমাধানটি আমাকে সহায়তা করেছিল!
lukyer

5
ধন্যবাদ, আপনি আমার স্ক্রিনটিকে এর মধ্য দিয়ে মুঠি পেতে বাঁচিয়েছেন।
পেঁচা

3
আমি আমার পরিবর্তনগুলি সেভাবে হারিয়েছি
জ্যাসেক ডিজিউর্ডজিকোভস্কি

1
হ্যাঁ আপনি এটি করে পরিবর্তনগুলি হারাবেন, এটি একটি বড় সতর্কতার সাথে আসা উচিত।
আলেকজান্ডার মিলস

আমি এটা অন্যদিকে চাই। মাস্টার আমার শাখার পিছনে এবং আমি মাস্টারের সাথে আপ টু ডেট তবে এটি এখনও শাখাগুলি স্যুইচ করতে অক্ষম। গিট বাগ থাকতে হবে।
jgmjgm

12

আপনি যদি স্থানীয় পরিবর্তনগুলি করতে না চান তবে আপনি নিজের শাখাটি চেকআউট করতে বাধ্য করতে পারেন।

git checkout -f branch_name

1
sudoপ্রয়োজন নেই, এটি শুধুমাত্র ফাইল অনুমতি ভেঙ্গে ফেলবো। এটি এক বছর আগে @ কিকি_ইউ পোস্ট করেছেন একই গিট কমান্ড , তবে এটি আরও খারাপ।
কেনোরব

2
আমি সেভাবে আমার পরিবর্তনগুলি হারিয়েছি
জ্যাসেক ডিজিউর্ডজিকোস্কি

2
@ জ্যাসেকডিজির্ডজিকোভস্কি তাই আপনি আপনার পরিবর্তনগুলি দুবার হারিয়েছেন (কিকি_উইউ এর উত্তর সম্পর্কে মন্তব্য দেখুন), উভয়ই সমাধান প্রয়োগ করে যা খুব স্পষ্টভাবে উল্লেখ করেছে যে স্থানীয় পরিবর্তনগুলি বাতিল করা হ'ল উদ্দেশ্য । আমার কট্টর ডিটেক্টরটি কি ভাঙা বা ... আপনি গুরুতর?
রোমেনভ্যালারি

@ রোমেনভ্যালেরি হুম, আমি অনুমান করি যে তারা অন্যদেরকে সতর্ক করার উপায় ছিল যা গিট দিয়ে ভিক্ষা করা হয় (তারা এই পোস্টটি পড়লে তাদের নতুন হতে হবে) তাদের যে কোনও পরিবর্তনকে বিদায় জানাতে প্রস্তুত থাকতে হবে। আমি ভেবেছিলাম যে একবারে একটি শাখায় যে পরিবর্তন হয়েছে তা সেই শাখায় থাকা উচিত যতক্ষণ না আমি এটি আবার চেকআউট করি না। নতুনদের যারা এইভাবে মনে করেন তাদের প্রতি ইঙ্গিত: গিট স্ট্যাশ ব্যবহার করুন :)
জ্যাসেক ডিজিউর্ডজিকোভস্কি

সদৃশ উত্তর, অকারণে। প্রথম উত্তরে আরও তথ্য রয়েছে।
MAChitgarha

9

আমি একই সমস্যার মুখোমুখি হয়েছি এবং এর দ্বারা সমাধান করেছি

গিট চেকআউট -f শাখা

ঠিক আছে, -fস্যুইচটি সম্পর্কে সতর্কতা অবলম্বন করুন । আপনি যদি -fস্যুইচটি ব্যবহার করেন তবে আপনি কোনও অনির্দিষ্ট পরিবর্তন হারাবেন । এমন কিছু ব্যবহারের ক্ষেত্রে থাকতে পারে যেখানে এটি ব্যবহার করা সহায়ক -f, বেশিরভাগ ক্ষেত্রে আপনি stashনিজের পরিবর্তনগুলি এবং তারপরে switchশাখাগুলি করতে চাইতে পারেন । stashingকার্যপ্রণালী উপরে ব্যাখ্যা করা হয়।


0

আপনি বর্তমান শাখায় প্রতিশ্রুতিবদ্ধ করতে পারেন, অন্য একটি শাখায় চেকআউট করতে পারেন এবং শেষ পর্যন্ত চেরি-পিক যে প্রতিশ্রুতিবদ্ধ (মার্জ হওয়ার পরিবর্তে)।


আপনি যদি এই বিষয়ে আরও ব্যাখ্যা দেন তবে এটি আরও সহায়ক হতে পারে।
MAChitgarha

-1

কোনও ভিন্ন শাখা পরীক্ষা করার চেষ্টা করার সময় আপনি যদি এটি পান:

my-mac:myGHProject ~$ git checkout other-branch
error: Your local changes to the following files would be overwritten by checkout:
    src/main/resources/reference.conf

এর অর্থ আপনি যে শাখায় যা যাচাই করেছেন তার প্রতিশ্রুতিবদ্ধ হওয়ার জন্য আপনার কিছু পরিবর্তন হয়েছে - অথবা আপনাকে উপরের পয়েন্টগুলির বেশিরভাগ হিসাবে মুছে ফেলা বা স্ট্যাশ করতে হবে। 20 বারের মধ্যে 19 আমি কেবল আমার পরিবর্তনগুলি সম্পাদন করার সম্ভাবনা বেশি।

my-mac:myGHProject ~$ git branch
  * my-local-branch
  * develop    

my-mac:myGHProject ~$ git status
On branch my-local-branch
   Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)
 modified:   src/main/resources/reference.conf

my-mac:myGHProject ~$ git add src/main/resources/reference.conf

my-mac:myGHProject ~$ git commit -m "updates on some config"
  [my-local-branch] updates on some config
  1 file changed, 131 insertions(+), 85 deletions(-)

এখন আপনি এটি করেছেন, আপনি অন্য শাখাটি পরীক্ষা করে দেখতে পারেন এবং খুব সহজেই পিছনে পিছনে যেতে পারেন।

my-mac:myGHProject ~$ git checkout other-branch

my-mac:myGHProject ~$ git status
  On branch other-branch

my-mac:myGHProject ~$ git checkout my-local-branch
  Switched to branch 'my-local-branch'

আপনার গিট পুশ অরিজিন run {ব্রাঞ্চ} কমান্ডটি চালানোর সময় আপনি নিশ্চিত হয়ে নিন যে আপনি উভয়ই ডান শাখায় এবং ডান শাখায় ঠেলাঠেলি করছেন। দ্রষ্টব্য: আপনি যদি নিজের প্রকল্পটি সরাসরি ইন্টেলিজে আঁকেন তবে আপনি দেখতে পাবেন যে আপনি মূল উইন্ডোর নীচের ডানদিকে আপনার শাখাটি পরিবর্তন করেছেন।

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