গিট স্ট্যাশ ত্রুটি: গিট স্ট্যাশ পপ এবং মার্জ সংঘাতের সাথে শেষ


200

আমি একটি করেছি git stash popএবং মার্জ সংঘাতের সাথে শেষ করেছি। আমি ফাইল সিস্টেম থেকে ফাইলগুলি সরিয়ে নিয়েছি এবং git checkoutনীচে দেখানো মত একটি করেছি, তবে এটি মনে করে যে ফাইলগুলি এখনও সজ্জিত নয়। আমি তখন ফাইলগুলি প্রতিস্থাপন এবং git checkoutআবার এবং একই ফলাফল করার চেষ্টা করেছি। আমি ইভেন্টটিকে -fপতাকা সহ জোর করে দেখার চেষ্টা করেছি । কোন সাহায্য প্রশংসা হবে!

chirag-patels-macbook-pro:haloror patelc75$ git status
app/views/layouts/_choose_patient.html.erb: needs merge
app/views/layouts/_links.html.erb: needs merge
# On branch prod-temp
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   db/schema.rb
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       unmerged:   app/views/layouts/_choose_patient.html.erb
#       unmerged:   app/views/layouts/_links.html.erb

chirag-patels-macbook-pro:haloror patelc75$ git checkout app/views/layouts/_choose_patient.html.erb
error: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
chirag-patels-macbook-pro:haloror patelc75$ git checkout -f app/views/layouts/_choose_patient.html.erb
warning: path 'app/views/layouts/_choose_patient.html.erb' is unmerged

উল্লেখ্য: অবস্থা পুনরূদ্ধার আগেgit stash apply/pop গীত 2.5 (Q2 এর 2015) সঙ্গে সহজ হওয়া উচিত, কাজ গাছ এখন পরিষ্কার করা প্রয়োজন, যেহেতু: দেখতে নীচের আমার উত্তর
VonC

উত্তর:


219

দেখুন মানুষ Git একত্রীকরণ ( বিরোধগুলির সমাধানের উপায় ):

দ্বন্দ্ব দেখার পরে আপনি দুটি জিনিস করতে পারেন:

  • মার্জ না করার সিদ্ধান্ত নিন। আপনার কেবলমাত্র ক্লিন আপগুলি দরকার হ'ল সূচক ফাইলটি পুনরায় বিপরীত 2 কে HEAD প্রতিশ্রুতিবদ্ধ করে পুনরায় সেট করা এবং 2. এবং 3 দ্বারা তৈরি গাছের পরিবর্তনগুলি পরিষ্কার করা; গিট রিসেট - এই জন্য ব্যবহার করা যেতে পারে।

  • বিরোধগুলি সমাধান করুন। গিট কার্যকারী গাছের মধ্যে দ্বন্দ্বগুলি চিহ্নিত করবে। আকারগুলিতে ফাইলগুলি সম্পাদনা করুন এবং গিট তাদের সূচীতে যুক্ত করুন। চুক্তি সিল করতে গিট কমিট ব্যবহার করুন।

এবং সত্য মার্জারের অধীনে (2 এবং 3 কী বোঝায়) দেখুন:

পরিবর্তনগুলি কীভাবে সমন্বয় করা যায় তা যখন স্পষ্ট হয় না, তখন নিম্নলিখিতটি ঘটে:

  1. হেড পয়েন্টারটি একই থাকে।

  2. MERGE_HEAD রেফারেন্সটি অন্য শাখার প্রধানকে নির্দেশ করতে সেট করা আছে।

  3. পরিষ্কারভাবে মার্জ হওয়া পাথগুলি সূচি ফাইল এবং আপনার কার্যকারী গাছের মধ্যে উভয়ই আপডেট করা হয়।

  4. ...

সুতরাং: git reset --hardআপনি যদি আপনার কার্যকারী গাছ থেকে স্ট্যাশ পরিবর্তনগুলি মুছে ফেলতে চান, বা git resetআপনি যদি কেবল সূচকটি পরিষ্কার করতে চান এবং হাতছাড়া হয়ে আপনার কার্যকারী গাছের দ্বন্দ্বগুলি ছেড়ে দিতে চান তবে ব্যবহার করুন use

অধীনে মানুষ Git লুকোবার জায়গা ( বিকল্প, পপ ) আপনি ছাড়াও পড়তে পারেন:

রাষ্ট্র প্রয়োগ বিবাদে ব্যর্থ হতে পারে; এই ক্ষেত্রে, এটি স্ট্যাশ তালিকা থেকে সরানো হবে না। আপনার নিজের হাতে দ্বন্দ্বগুলি সমাধান করতে হবে এবং পরে গিট স্ট্যাশ ড্রপটি ম্যানুয়ালি কল করতে হবে।


9
প্রকৃতপক্ষে, আপনি কোনও স্ট্যাশ ফেলে দেওয়ার পরেও এটি পুনরুদ্ধার করা এখনও সম্ভব (আরও কঠিন হলেও), কারণ পরিবর্তনটি এখনও রিপোজিটরিতে বিদ্যমান। stackoverflow.com/search?q=git+recover+dropped+stash
phils

3
@ নেপলি: এটা ভাল না খারাপ? আমার উত্তরটির উন্নতি করতে আপনাকে স্বাগতম, যেখানে আপনি এটি প্রথম স্থানটিতে বুঝতে পারেন নি ...
টানাসিউস

1
আমি মনে করি যে উত্স কোড পুনর্বিবেচনা একটি জটিল সমস্যা ডোমেন। বিভ্রান্ত হওয়া সহজ। আমি এখনও মনে করি যে আপনার উত্তরটি ভাল কারণ এটি আমার পদ্ধতির পুনরায় নিশ্চিত করেছে।
স্পষ্টত

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

11
"রাষ্ট্র প্রয়োগ করা দ্বন্দ্বের সাথে ব্যর্থ হতে পারে; এক্ষেত্রে এটি স্ট্যাশ তালিকা থেকে সরানো হয়নি।" এটি আমার মতে পোস্টের সবচেয়ে গুরুত্বপূর্ণ অংশ। আপনার উত্তরটি সম্পাদন করার জন্য বড় এবং বন্ধুত্বপূর্ণ অক্ষরে অক্ষত প্যানিক শব্দটি না দিয়ে শব্দটি সামনে রেখে বিবেচনা করুন । (+1 ইতিমধ্যে যদিও।) ধন্যবাদ।
প্যাট্রিক এম

42

আমার সাথেও একই ঘটনা ঘটেছিল। আমি এখনও ফাইলগুলি মঞ্চস্থ করতে চাইনি তাই আমি সেগুলি যুক্ত করেছিলাম git addএবং ঠিক তখনই করেছি git reset। এটি মূলত সবেমাত্র যুক্ত হয়েছে এবং তারপরে আমার পরিবর্তনগুলি আনস্টেজ করা হয়েছে তবে জলাবদ্ধতার পথগুলি সাফ করেছে।


4
এটি ব্যবহার করার চেয়ে ভাল বলে মনে হচ্ছে reset --hardকারণ এটি আপনার ফাইলগুলিকে ওভাররাইট করে না (মার্জ সমস্যাযুক্ত ফাইলগুলি বাদ দিয়ে)। ধন্যবাদ!
সাইনলাও

আমি এখনও ফাইলগুলি মঞ্চায়িত করতে চাইনি তাই আমি এগুলি যুক্ত করেছিলাম - addকার্যকারী গাছ থেকে সূচকে কোনও বিষয়বস্তু স্টেজ করে না ? আপনার উত্তরটি বর্ণনা থেকে কেন কাজ করে তা আমি বুঝতে পেরেছি বলে আমি মনে করি না।
ড্রয় নোকস

2
git addতাদের মঞ্চায়িত করে তবে git resetযা আমি তত্ক্ষণাত্ তাদের সম্পাদন করে না। মূলত এটি সরল পথগুলিকে সাফ করে এবং গিট আউট করে আমাকে আমার সাধারণ কাজের গাছে ফিরিয়ে দেয়।
অ্যারন

3
আপনি প্রয়োজন হবে না git addআপনি যাচ্ছেন যদি git resetgit resetকার্যকরভাবে "পূর্বাবস্থায় ফিরিয়ে আনে" git addgit reset( --mixed<- ডিফল্ট) কার্যকরভাবে কার্যকরী ডিরেক্টরিটিকে স্পর্শ করে না তাই ঠিক আপনার কার্য ডিরেক্টরিতে যা ছিল, সংঘাতের বিবাদ এবং সমস্ত কিছুই একা হয়ে যায়। সূচকটি (এবং প্রযুক্তিগতভাবে শাখা প্রধান) পুনরায় সেট করা হয়েছে (কোনও রেফ ছাড়াই তারা পুনরায় পুনরায় সেট হয়ে যায় HEAD, যার অর্থ সম্ভবত শাখা প্রধানের কোনও পরিবর্তন হয় না, এবং কার্যকরভাবে git addসূচকে করা কোনও কাজ বাতিল করে দেয়, পাশাপাশি নিরবচ্ছিন্ন পথগুলি পরিষ্কার করে) ।
24:54

3
ক্রম , সম্পাদনা / সমাধানে , git resetএবং git stash dropভাল কাজ করে। এটি git stash popকোনও বিরোধ ছাড়াই যা করত তা করে। মনে হয় এটির git addপ্রয়োজন নেই; যদিও এটি দরকারী এটি আপনার পক্ষে দ্বন্দ্ব সহ অনেকগুলি ফাইল রয়েছে। প্রতিটির সমাধান হওয়ার সাথে সাথে এগুলি যুক্ত করা যায় এবং git statusসেগুলি ট্র্যাক করে রাখে।
নির্মম আওয়াজ

13

যদি আমার মতো, আপনি সাধারণত যা চান তা হ'ল স্ট্যাশ করা ফাইলগুলির সাথে ওয়ার্কিং ডিরেক্টরিতে থাকা সামগ্রীর ওভাররাইট করা এবং আপনি এখনও একটি বিরোধ পেতে পারেন তবে আপনি যা চান তা হ'ল git checkout --theirs -- .মূল থেকে ব্যবহার করে বিরোধটি সমাধান করা ।

এর পরে, আপনি git resetসূচক থেকে সমস্ত ডিরেক্টরিকে কার্যকরী ডিরেক্টরিতে নিয়ে আসতে পারেন , যেহেতু দ্বন্দ্বের ক্ষেত্রে দ্বন্দ্বের ক্ষেত্রে অ-বিরোধিত ফাইলগুলিতে পরিবর্তনগুলি সূচীতে থাকে।

আপনি git stash drop [<stash name>]পরে চালাতে চান , স্ট্যাশ থেকে মুক্তি পেতে পারেন, কারণ git stash popবিরোধের ক্ষেত্রে এটি মুছে ফেলা হয় না।


2

মনে রাখবেন যে গিট 2.5 (Q2 2015) ভবিষ্যতের গিট সেই দৃশ্যটিকে অসম্ভব করে দেওয়ার চেষ্টা করতে পারে।

দেখুন ed178ef কমিট দ্বারা জেফ কিং ( peff), 22 এপ্রিল 2015.
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 05c3967 , 19 মে 2015)

দ্রষ্টব্য: এটি আবার ফিরিয়ে দেওয়া হয়েছে। নীচে দেখুন

stash: প্রয়োগ / পপ করার জন্য একটি পরিষ্কার সূচক প্রয়োজন

সমস্যা

যদি আপনার সূচকে থাকা বিষয়বস্তু থাকে এবং " stash apply/pop" চালনা করেন তবে আমরা একটি বিরোধের দিকে ঝুঁকতে পারি এবং সূচীতে নতুন এন্ট্রি রাখতে পারি।
আপনার মূল অবস্থায় ফিরে আসা সেই মুহূর্তে কঠিন, কারণ "গিট রিসেট - কিপ" এর মতো সরঞ্জামগুলি মঞ্চস্থ কোনও কিছুকেই উড়িয়ে দেবে

অন্য কথায়:

" git stash pop/apply" এটি নিশ্চিত করতে ভুলে গেছেন যে কেবল কার্যকারী গাছটি পরিষ্কার নয়, সূচকটিও পরিষ্কার is
দ্বিতীয়টি গুরুত্বপূর্ণ কারণ স্ট্যাশ অ্যাপ্লিকেশন দ্বন্দ্ব করতে পারে এবং সূচকটি সংঘাতের সমাধানের জন্য ব্যবহৃত হবে।

সমাধান

মঞ্চ পরিবর্তন হয় যখন আমরা প্রয়োগ অস্বীকার করে এই নিরাপদ করতে পারেন।

এর অর্থ যদি পরিবর্তিত ফাইলগুলিতে স্ট্যাশ প্রয়োগ করার কারণে যদি আগে মার্জ হত (সংযুক্ত কিন্তু প্রতিশ্রুতিবদ্ধ নয়) তবে এখন সেগুলি কোনও সংযোজন হবে না কারণ স্ট্যাশ প্রয়োগ / পপ সঙ্গে সঙ্গে বন্ধ হয়ে যাবে:

Cannot apply stash: Your index contains uncommitted changes.

আপনাকে পরিবর্তিত হতে বাধ্য করার অর্থ হ'ল, মার্জ হওয়ার ক্ষেত্রে আপনি খুব সহজেই এর সাথে প্রাথমিক অবস্থার (আগে git stash apply/pop) পুনরুদ্ধার করতে পারেন git reset --hard


দেখুন কমিট 1937610 (15 জুন 2015), এবং ed178ef কমিট (22 এপ্রিল 2015) দ্বারা জেফ কিং ( peff)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট bfb539b , 24 জুন 2015)

এই প্রতিশ্রুতিবদ্ধতা কোনও স্ট্যাশ প্রয়োগের সুরক্ষার উন্নতি করার প্রয়াস ছিল, কারণ অ্যাপ্লিকেশন প্রক্রিয়া দ্বন্দ্বপূর্ণ সূচক এন্ট্রি তৈরি করতে পারে, যার পরে মূল সূচক অবস্থা পুনরুদ্ধার করা শক্ত is

দুর্ভাগ্যক্রমে, এটি " git stash -k" এর চারপাশে কিছু সাধারণ কর্মপ্রবাহকে আঘাত করে , যেমন:

git add -p       ;# (1) stage set of proposed changes
git stash -k     ;# (2) get rid of everything else
make test        ;# (3) make sure proposal is reasonable
git stash apply  ;# (4) restore original working tree

আপনি যদি পদক্ষেপ (3) এবং (4) এর মধ্যে "গিট কমিট" করেন তবে এটি ঠিক কাজ করে। তবে, যদি এই পদক্ষেপগুলি প্রাক-কমিট হুকের অংশ হয় তবে আপনার সেই সুযোগ নেই (পরীক্ষাগুলি পাস হয়েছে কিনা তা নির্বিশেষে আপনার মূল অবস্থাটি পুনরুদ্ধার করতে হবে)।

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