"আপনার একীকরণের আগে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন বা সেগুলি স্ট্যাশ করুন" বলে গিটটি কীভাবে সমাধান করব?


761

আমি আমার স্থানীয় মেশিনে কিছু আপডেট করেছি, এগুলি একটি দূরবর্তী সংগ্রহস্থলে ঠেলেছি এবং এখন আমি সার্ভারে পরিবর্তনগুলি টানতে চেষ্টা করছি এবং আমি বার্তাটি পেয়েছি;

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

WP- বিষয়বস্তু / w3tc-কনফিগ / master.php

দয়া করে, আপনার একত্রীকরণের আগে আপনার পরিবর্তনগুলি সংযুক্ত করুন বা সেগুলি স্ট্যাশ করুন।

তাই আমি দৌড়েছি,

git checkout -- wp-content/w3tc-config/master.php

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

কোন ধারনা?



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

উত্তর:


1298

আপনি স্থানীয় পরিবর্তনগুলির সাথে একত্রীকরণ করতে পারবেন না। গিট আপনাকে সম্ভাব্য গুরুত্বপূর্ণ পরিবর্তনগুলি হারাতে বাঁচায়।

আপনার কাছে তিনটি বিকল্প রয়েছে:

  • ব্যবহার করে পরিবর্তন প্রতিশ্রুতিবদ্ধ

    git commit -m "My message"
    
  • এটি স্ট্যাশ।

    স্ট্যাশিং স্ট্যাক হিসাবে কাজ করে, যেখানে আপনি পরিবর্তনগুলিকে ধাক্কা দিতে পারেন এবং আপনি এগুলি বিপরীত ক্রমে পপ করেন।

    স্ট্যাশ করতে, টাইপ করুন

    git stash
    

    মার্জটি করুন এবং তারপরে স্ট্যাশ টানুন:

    git stash pop
    
  • স্থানীয় পরিবর্তনগুলি বাতিল করুন

    ব্যবহার git reset --hard
    বাgit checkout -t -f remote/branch

    বা: একটি নির্দিষ্ট ফাইলের জন্য স্থানীয় পরিবর্তনগুলি ত্যাগ করুন

    ব্যবহার git checkout filename


104
আপনি একটি নির্দিষ্ট ফাইলের জন্য স্থানীয় পরিবর্তনগুলিও
এড়াতে

6
ধন্যবাদ। আমি git reset --hardএটিতে যুক্ত করব, আপনি যদি না করে থাকেন তবে আপনিও অপ্রচলিত ফাইলগুলি মুছতে চাইতে পারেনgit clean -dfx
জো স্প্রেগ

13
ডিফল্টরূপে git stashকোনও ফাইল নেই যার জন্য কোনও ইতিহাস নেই ash সুতরাং আপনার যদি এমন ফাইল থাকে যা আপনি এখনও যোগ করেন নি তবে যা একীভূত করে ওভাররাইট করা বা "তৈরি" করা হবে তবে মার্জটি এখনও অবরুদ্ধ হবে। এই পরিস্থিতিতে আপনি git stash -uঅনির্বাচিত ফাইলগুলিও স্ট্যাশ করতে ব্যবহার করতে পারেন । অথবা আপনি কেবল এগুলি মুছতে পারেন!
জোয়েটউইডল

25
দৌড়ানো git clean -dfxএকটি ভয়ানক ধারণা ছিল। আমার আসলে প্রয়োজনীয় কিছু .gitignored ফাইল সরানো হয়েছে।
ezuk

5
আমি এমন একটি পরিস্থিতির মুখোমুখি হয়েছি যেখানে একজন ব্যবহারকারী, করার পরেও git reset --hardনিরবচ্ছিন্ন পরিবর্তনগুলি করেছিল!
আমেদী ভ্যান গ্যাস

83
git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index

প্রথম কমান্ড স্ট্যাশ-এ অস্থায়ীভাবে আপনার পরিবর্তনগুলি সংরক্ষণ করে এবং এটিকে কার্যকরী ডিরেক্টরি থেকে সরিয়ে দেয়।

দ্বিতীয় কমান্ড শাখা পরিবর্তন করে।

তৃতীয় কমান্ড স্ট্যাশ-এ সংরক্ষণ করা পরিবর্তনগুলি পুনরুদ্ধার করে ( --indexস্ট্যান্ডার্ড ফাইলগুলি এখনও স্টেজড হয় তা নিশ্চিত করার জন্য বিকল্পটি কার্যকর)।


1
stackoverflow.com/questions/15286075/… , পাশাপাশি দরকারী হতে পারে
বিক্রমভি

2
@ বিক্রমভি এর বক্তব্যটি ব্যাখ্যা করতে: আমরা এর git stash popপরিবর্তেও ব্যবহার করতে পারি git stash apply। প্রাক্তন এটি স্ট্যাশ থেকে সরিয়ে ফেলেন, যদিও পরবর্তীকালে এখনও এটি রাখা হয়
অনুপম

27

আপনি নিম্নলিখিত পদ্ধতির একটি ব্যবহার করতে পারেন:

রি-বেসের ফলে

সাধারণ পরিবর্তনের জন্য পরিবর্তনগুলি টানার সময় এর উপরে পুনর্বার চেষ্টা করুন, যেমন

git pull origin master -r

সুতরাং এটি আনার পরে আপনার বর্তমান শাখাটি উজানের শাখার শীর্ষে প্রয়োগ করা হবে।

এই সমতূল্য: checkout master, fetchএবং rebase origin/masterGit কমান্ড।

এটি অপারেশনের সম্ভাব্য বিপজ্জনক মোড। এটি ইতিহাস পুনর্লিখন করে, যা আপনি ইতিমধ্যে সেই ইতিহাস প্রকাশের সময় ভাল করে না। আপনি git-rebase(1)সাবধানে না পড়লে এই বিকল্পটি ব্যবহার করবেন না ।


চেকআউট

আপনি যদি স্থানীয় পরিবর্তনগুলির বিষয়ে চিন্তা না করেন তবে আপনি অন্য শাখায় অস্থায়ী (জোর দিয়ে) স্যুইচ করতে পারেন এবং এটিকে আবার স্যুইচ করতে পারেন, যেমন

git checkout origin/master -f
git checkout master -f

রিসেট

আপনি যদি নিজের স্থানীয় পরিবর্তনগুলি সম্পর্কে চিন্তা করেন না তবে এটিকে হেড (মূল অবস্থা) এ পুনরায় সেট করার চেষ্টা করুন, যেমন

git reset HEAD --hard

উপরেরটি যদি সহায়তা না করে তবে এটি আপনার গিট নরমালাইজেশন ফাইলে নিয়ম হতে পারে ( .gitattributes) সুতরাং এটি যা বলে তা প্রতিশ্রুতি দেওয়া ভাল। অথবা আপনার ফাইল সিস্টেম অনুমতিগুলি সমর্থন করে না, তাই আপনাকে filemodeআপনার গিট কনফিগারেশনে অক্ষম করতে হবে ।

সম্পর্কিত: স্থানীয় ফাইলগুলিকে ওভাররাইট করতে কীভাবে আমি "গিট টান" বলব?


1
কাজ করা হয়নি: আমি "আপনার পরিবর্তনগুলি আগে স্ট্যাশ করুন" এর মতো একই বার্তাটি পাই। আমি যখন "গিট স্ট্যাশ" টাইপ করি এবং তারপরে "গিট টান" -> "ত্রুটি: আপনার কাছে সংরক্ষিত পরিবর্তন আছে .. প্রথমে একটি স্ট্যাশ করুন"। আমার কম্পিউটারটি ধ্বংস করার
কিছুক্ষণ

@ ট্রিনিটি ৪২০ এটি আপনার ফাইলের অনুমতি হতে পারে, স্ট্যাশ করার git statusপরে আপনার কী পরিবর্তন রয়েছে তা পরীক্ষা করে দেখুন । কোনও উত্তর যদি সহায়তা না করে তবে একটি নতুন প্রশ্ন যুক্ত করার বিষয়টি বিবেচনা করুন।
কেনারব

আপনাকে ধন্যবাদ তবে আমার সমস্যাটি সমাধান হয়েছে, এখানে সবকিছু চেষ্টা করেছেন, কিছুই কাজ করেনি, তারপরে পিএইচপিএসটারমে "পরিবর্তনগুলি" "" সংশ্লেষ "ক্লিক করেছেন এবং তারপরে আমি পরিবর্তনগুলি আনস্টশ করে দিয়েছি এবং এটি কাজ করেছে ..
ট্রিনিটি 420


13

সুতরাং যে পরিস্থিতিটির মধ্যে আমি দৌড়েছি তা ছিল:

ত্রুটি: নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তনগুলি মার্জ করে ওভাররাইট করা হবে: wp-content / w3tc-config / master.php দয়া করে, আপনার একত্রীকরণের পূর্বে আপনার পরিবর্তনগুলি সংশোধন করুন বা তাদের স্ট্যাশ করুন।

ঠিক আগে, বাদে, দূরবর্তী ছিল: তাই আসলে এটি:

রিমোট: ত্রুটি: নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তনগুলি মার্জ করে ওভাররাইট করা হবে: কিছু / file.ext দয়া করে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন বা মার্জ করার আগে তাদের স্ট্যাশ করুন।

যা ঘটছিল তা হচ্ছিল (আমি মনে করি, 100% ইতিবাচক নয়) গিটার পোস্টের প্রাপ্ত হুকটি রিমোট সার্ভার রিপোজিটরিতে গতিবিধির পরিবর্তনের কারণে চালানো শুরু করছিল এবং স্ক্রু আপ করছিল, যা তাত্ত্বিকভাবে স্পর্শ করা উচিত হয়নি।

সুতরাং পোস্ট-রিসিভ হুকটি সনাক্ত করে এবং এটি সন্ধানের মাধ্যমে আমি যা করেছিলাম তা শেষ করে সার্ভারের দূরবর্তী সংগ্রহস্থলটিতে যেতে হয়েছিল, এবং সেখানে পরিবর্তন হয়েছিল (যা আমার স্থানীয় সংগ্রহস্থলে ছিল না, যা আসলে, বলেছে যে এটির সাথে মেলে, কোনও পরিবর্তন হয়নি, প্রতিশ্রুতিবদ্ধ হওয়ার মতো কিছুই নেই, আপ টু ডেট ইত্যাদি) তাই লোকাল থাকাকালীন সার্ভারে কোনও পরিবর্তন হয়নি, আমি তখন একটি করেছি git checkout -- some/file.extএবং পরে স্থানীয় এবং দূরবর্তী সংগ্রহস্থলগুলি আসলে মিলেছে এবং আমি পারলাম কাজ চালিয়ে যান এবং মোতায়েন করুন। এই পরিস্থিতিটি কীভাবে ঘটেছিল তা পুরোপুরি নিশ্চিত নয়, যদিও কয়েক ডজন বিকাশকারী প্লাস আইটি পরিবর্তনগুলির সাথে এর কিছু থাকতে পারে।


2
এটি কোন প্রশ্ন বা উত্তর?
stdcall

2
@stdcall - উভয়ের একটি বিট। আমি যখন প্রশ্নের মধ্যে বর্ণিত এই পরিস্থিতিতে দৌড়েছি তখন এটি ঠিক করার জন্য আমাকে এই কাজটি করতে হয়েছিল। এটি অবশ্যই একটি সাধারণ গিট সমাধানের মতো ছিল না, এবং প্রশ্ন থেকে মনে হচ্ছে এটি একই অস্বাভাবিক পরিস্থিতি হতে পারে (যেমন, সার্ভারে কনফিগার পরিবর্তন, তবে স্থানীয় কোনও পরিবর্তন নেই)। কেন (বা কীভাবে) এটি ঘটেছিল সে সম্পর্কে কারও যদি ধারণা থাকে তবে আমি যে কোনও অন্তর্দৃষ্টি গ্রহণ করব welcome
মাইক

7

সতর্কতা: এটি তালিবদ্ধ ফাইলগুলি মুছবে, সুতরাং এটি এই প্রশ্নের দুর্দান্ত উত্তর নয়।

আমার ক্ষেত্রে, আমি ফাইলগুলি রাখতে চাইনি, সুতরাং এটি আমার পক্ষে কাজ করেছে:

2.11 গিট এবং আরও নতুন:

git clean  -d  -fx .

পুরানো গিট:

git clean  -d  -fx ""

তথ্যসূত্র: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x মানে উপেক্ষা করা ফাইলগুলিও সরানো হবে পাশাপাশি গিটের অজানা ফাইলগুলিও মুছে ফেলা হবে।

  • -d মানে আনট্র্যাকড ফাইলগুলি ছাড়াও তালিকাভুক্ত ডিরেক্টরিগুলি সরান।

  • -f এটি চালাতে বাধ্য করা প্রয়োজন।


4

এই সমস্যাটি সমাধান করার সময় আপনার নতুন নির্মিত ফাইলগুলির রেকর্ড রাখতে:

আপনার যদি নতুন তৈরি ফাইল রয়েছে , আপনি স্থানীয় পরিবর্তনগুলির একটি প্যাচ তৈরি করতে পারেন, রিমোট মার্জগুলিতে টানতে পারেন এবং রিমোট মার্জটি নীচের ধাপে সংজ্ঞায়িত পদক্ষেপ হিসাবে সম্পূর্ণ হওয়ার পরে আপনার স্থানীয় প্যাচ প্রয়োগ করতে পারেন:

  1. আপনার স্থানীয় পরিবর্তনগুলি পর্যায় দিন। (প্রতিশ্রুতিবদ্ধ না)। নতুন তৈরি করা ফাইলগুলির প্যাচ তৈরি করতে স্টেজিংয়ের প্রয়োজন (যেহেতু তারা এখনও চিহ্নবিহীন রয়েছে)

git add .

  1. রেকর্ড রাখতে একটি প্যাচ তৈরি করুন

git diff --cached > mypatch.patch

  1. স্থানীয় পরিবর্তনগুলি বাতিল করুন এবং নতুন স্থানীয় ফাইল মুছুন

git reset --hard

  1. পরিবর্তন টানুন

git pull

  1. আপনার প্যাচ প্রয়োগ করুন

git apply mypatch.patch

গিট পরিবর্তনগুলিকে মার্জ করে এবং একীভূত নয় এমন পরিবর্তনের জন্য .rej ফাইল তৈরি করবে।

আনুর পরামর্শ অনুসারে, আপনার যদি প্যাচ প্রয়োগের সমস্যা হয় তবে চেষ্টা করুন:

git apply --reject --whitespace=fix mypatch.patch এই উত্তর গিট: প্যাচ এই সমস্যা সম্পর্কে বিস্তারিত আলোচনা আলোচনা করে না

আপনার বৈশিষ্ট্যটিতে আপনার ক্রমাগত কাজটি উপভোগ করুন এবং হয়ে গেলে স্থানীয় পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।


আমি কোডের একটি অংশকে নতুন পরিবর্তনগুলির সাথে ঠেলে দিতে চেয়েছিলাম তাই করেছিলাম: ১. আমার স্থানীয় দেব শাখা থেকে একটি প্যাচ তৈরি করেছে 2. হার্ড রিসেটটি করেছে master. মাস্টার থেকে দেব-এ নতুন পরিবর্তনগুলি টানুন (কোনও মার্জ সংঘাত এড়াতে) 4 আমার স্থানীয় দেবের মধ্যে একটি ছোট পরিবর্তন করেছে 5.. দূরবর্তী দেবের দিকে ধাক্কা 6.. প্রয়োগিত প্যাচটি ফিরে -> ত্রুটি পেয়েছে: তবে error: patch failed: yourfile.py:33 error: yourfile.py: patch does not applyআমার কাছে এখনও মাইপ্যাচ.প্যাচ আছে, তবে কেন এটি প্রয়োগ হচ্ছে না জানি না এবং আমি আমার পরিবর্তনগুলি হারিয়েছি !
আনু

আমি পেয়েছি, সঠিক কমান্ডটি ছিল git apply --reject --whitespace=fix mypatch.patch, আমার পরিবর্তনগুলি ফিরে পেয়েছি !!! [ধন্যবাদ] [ স্ট্যাকওভারফ্লো.com / a / 15375869 / 6484358 )
আনু

1
অনু, কমান্ড git প্রয়োগ mypatch.patch প্যাচ প্রয়োগ করা সঠিক, আমি সর্বদা এটি ব্যবহার করি, তৈরি প্যাচ নিজেই কিছু সমস্যা হতে পারে এবং আপনার প্যাচ হাতে থাকলে আপনি কখনও পরিবর্তনগুলি হারাতে পারবেন না, এটি সমস্ত একীভূত পরিবর্তন রয়েছে।
মনপ্রীত

2

টান দেওয়ার আগে কমিট করার কথা বলছি

  • গিট স্ট্যাশ
  • গিট টান উত্স << শাখার নাম >>

প্রয়োজন হলে :

  • গিট স্ট্যাশ প্রয়োগ

1
আপনি যখন ওয়ার্কিং ডিরেক্টরি এবং সূচকের বর্তমান অবস্থা রেকর্ড করতে চান তবে গিট স্ট্যাশ ব্যবহার করুন তবে একটি পরিষ্কার ওয়ার্কিং ডিরেক্টরিতে ফিরে যেতে চান। কমান্ডটি আপনার স্থানীয় পরিবর্তনগুলিকে দূরে সরিয়ে দেয় এবং হেডের প্রতিশ্রুতি মেলানোর জন্য ওয়ার্কিং ডিরেক্টরিটিকে ফিরিয়ে দেয়।
পুষ্পক শর্মা

2

আমার জন্য, শুধুমাত্র git reset --hardকাজ।

প্রতিশ্রুতিবদ্ধতা কোনও বিকল্প ছিল না, কারণ প্রতিশ্রুতি দেওয়ার মতো কিছুই ছিল না।

স্ট্যাশিং কোনও বিকল্প ছিল না কারণ স্ট্যাশ করার মতো কিছুই ছিল না।

এটা দেখে মনে হচ্ছে বাদ ফাইল থেকে থাকতে পারে .git/info/excludeএবং থাকার git update-index --assume-unchanged <file>'কিছু ফাইল ed।


0

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

আমি তারপরে ফাইলটি প্রতিস্থাপন করেছি, সামগ্রীগুলিতে আবার অনুলিপি করেছি এবং এমন কি চলছিল যেন চলতে থাকে।



0

আমি প্রথম জবাবটি চেষ্টা করেছিলাম: git stashসর্বোচ্চ স্কোর সহ কিন্তু ত্রুটি বার্তাটি এখনও পপ আপ হয়ে গেছে এবং তারপরে আমি এই নিবন্ধটি স্ট্যাশ 'অনিচ্ছাকৃত প্রতিশ্রুতি' এর পরিবর্তে পরিবর্তনগুলি করতে পেয়েছি

এবং ত্রুটি বার্তাটি অবশেষে অদৃশ্য হয়ে গেল:

1: git add .

2: git commit -m "this is an additional commit"

3: git checkout the-other-file-name

তারপর এটি কাজ করে। আশা করি এই উত্তরটি সাহায্য করবে। :)


0

আপনি যদি গিট এক্সটেনশানগুলি ব্যবহার করছেন তবে নীচের চিত্রের মতো আপনার স্থানীয় পরিবর্তনগুলি সন্ধান করতে সক্ষম হওয়া উচিত Working directory:

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি কোনও পরিবর্তন না দেখেন তবে এটি সম্ভবত আপনি ভুল উপ-মডিউলে রয়েছেন বলেই। সুতরাং নীচের মত সাবমেরিন আইকন সহ সমস্ত আইটেম চেক করুন:

এখানে চিত্র বর্ণনা লিখুন

আপনি যখন কিছু আপত্তিহীন পরিবর্তন পেয়েছেন:

সঙ্গে সঙ্গতিপূর্ণ নির্বাচন Working directoryকরতে, নেভিগেট পার্থক্য একটা পেন্সিল (অথবা সঙ্গে সারি উপর ট্যাব, রাইট ক্লিক +বা -) আইকন, নির্বাচন রিসেট প্রথম কমিট বা বা লুকোবার জায়গা বা যাই হোক না কেন আপনি এটি দিয়ে কি করতে চান কমিট।


0

আমার জন্য এটি কাজ করেছে:

git reset --hard

এবং তারপর

git pull origin <*current branch>

তারপর

git checkout <*branch>


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