গিট এবং "শাখা 'এক্স' পুরোপুরি একত্রিত হয়নি" ত্রুটি


294

আমি মাস্টার শাখা থেকে কমান্ডগুলি ব্যবহার করেছি

git branch experiment
git checkout experiment

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

git commit . -m 'changed files'
git push -u origin experiment

পরে আমি সিদ্ধান্ত নিয়েছি আমার পরীক্ষামূলক শাখাকে মাস্টার শাখায় একীভূত করব।

git checkout master
git merge experiment

অবশেষে আমি পরিবর্তনগুলি গিটহাবের দিকে ঠেলে দিয়েছি।

git push -u origin master

আমি আমার পরীক্ষামূলক শাখাটি ব্যবহার করে মুছে ফেলার চেষ্টা না করা পর্যন্ত সব ঠিকঠাক হয়েছিল

git branch -d experiment

আমি ত্রুটি বার্তাটি error: The branch 'experiment' is not fully merged.পেয়েছি আমি গিটে কিছুটা নতুন, এবং আমি জানি না যে আমি আরও দুটি শাখাকে একীভূত করতে পারলাম। আমি এখানে কি মিস করছি?


2
এই পোস্টটি কি আপনাকে সাহায্য করে? stackoverflow.com/questions/1710894/...
Chrisdigital

2
এটি মাঝে মাঝে আসে যখন আমি একটি করেছিgit commit --amend
আরকোলি

12
এছাড়াও - মনে রাখবেন যে এই বার্তাটি প্রদর্শিত হবে এর পরে squash: stackoverflow.com/q/41946475/109941
জিম জি

আমি মনে করি সর্বাধিক সাধারণ দৃশ্যটি হল, আপনি স্থানীয়ভাবে শাখাটি মোছার আগে আপনার নতুন মার্জড পরিবর্তনগুলি টানতে হবে।
রাইসিনব্রানক্রাঞ্চ 14

উত্তর:


313

দ্রষ্টব্য প্রতিক্রিয়া হিসাবে নোট রেকর্ডিং পরিবর্তন। ধন্যবাদ @ স্লেকসে
এটি কোনও ত্রুটি নয়, এটি একটি সতর্কতা। এর অর্থ আপনি যে শাখাটি মুছে ফেলতে চলেছেন তার মধ্যে এমন কমিট রয়েছে যা কোনওটির থেকে পৌঁছানো যায় না: এর উজানের শাখা বা হেড (বর্তমানে পুনর্বিবেচনাটি পরীক্ষা করে নেওয়া হয়েছে)। অন্য কথায়, যখন আপনি কমান্ডগুলি হারাতে পারেন ¹

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

সুতরাং আপনি সেই শাখাটি পরীক্ষা করে সতর্কতা এড়াতে পারবেন যাতে এমন অন্য শাখা মুছে ফেলা আপনি অন-রেফারেন্সের বিষয়ে যে কমিটগুলি করেন সেগুলি থাকে ²

আপনি যাচাই করতে চাইবেন যে আপনি আসলে কোনও গুরুত্বপূর্ণ অঙ্গীকার মিস করছেন না:

git log --graph --left-right --cherry-pick --oneline master...experiment

এটি আপনাকে শাখাগুলির মধ্যে যে কোনও নাম্বার ভাগ করে নেওয়ার একটি তালিকা দেবে। আপনি যদি কৌতূহলী হয়ে থাকেন তবে তা ছাড়া কোনও পার্থক্য হতে পারে --cherry-pickএবং এই পার্থক্যটি হ'ল সতর্কতার কারণ হতে পারে:

--cherry-pick

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


¹ এগুলি সত্যই কেবলমাত্র কিছুক্ষণ পরে ডিফল্টরূপে আবর্জনা সংগ্রহ করা হয়। এছাড়াও, git-branchকমান্ডটি সমস্ত শাখার পুনর্বিবেচনা গাছ পরীক্ষা করে না । স্পষ্ট ভুলগুলি এড়াতে সতর্কতাটি রয়েছে।

। (এখানে আমার পছন্দটি কেবল পরিবর্তে মুছে ফেলার জন্য জোর করা, তবে আপনি অতিরিক্ত আশ্বাস পেতে চাইতে পারেন)।


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

35
-1 "এর অর্থ আপনি যে শাখার মুছতে চলেছেন তার মধ্যে এমন কমিট রয়েছে যা অন্য কোনও রেফ হেড থেকে পৌঁছনীয় নয়" " এটি সঠিক নয়। সতর্কবার্তাটির অর্থ শাখাটি তার প্রবাহ থেকে (যদি এটি থাকে) বা বর্তমান হেড থেকে আসে না reac গিট-ব্রাঞ্চের ম্যানপেজ দেখুন।
সেলেসেক

3
পছন্দ করুন কমান্ড গিট শাখা -vv সত্যিই পরিষ্কার করেছে যে আমার জন্য কী চলছে।
জেসন ম্যাসি

11
@ সালস্ক মন্তব্যের জন্য ধন্যবাদ - এই উত্তরটি সত্যই সম্পাদিত হওয়া উচিত। এটি অত্যন্ত লজ্জার বিষয় যে এটি অত্যন্ত উচ্চারণ করা হয়েছে কারণ মূল ব্যাখ্যাযোগ্য বাক্যটি ভুল। আমি এই সমস্যাটি পেয়েছি এবং সমস্যাটি কী তা বোঝার চেষ্টা করে বিরক্তিকর দীর্ঘ সময় ব্যয় করেছি এবং এটি কেবলমাত্র দূরবর্তী ট্র্যাকিং শাখাটি পুল অনুরোধের অংশ হিসাবে মুছে ফেলা হয়েছিল, এবং সেই সময় থেকে যখন আমি মাস্টার থেকে পরিবর্তনগুলি টেনেছিলাম স্থানীয় শাখায়। কেবল 'সমস্যা' হ'ল দূরবর্তী ট্র্যাকিং শাখাটি খুঁজে পাওয়া যাচ্ছিল না, যা মুছে ফেলা হয়েছিল (এবং আমি একই কারণে স্থানীয় শাখাটি মোছার চেষ্টা করছি)।
এলী

3
হ্যাঁ, এটি কেবল তখনই ঘটতে পারে যখন আপনি কোনও স্থানীয় শাখা মুছানোর চেষ্টা করছেন যখন আপনি যখন তৈরি করেছিলেন তখন তার চেয়ে আলাদা শাখায় রয়েছেন। "যে কমিটগুলি অন্য কোনও রেফার কাছ থেকে পাওয়া যায় না" ভুল এবং অযথা ভয়ঙ্কর!
অমলগোভিনাস

80

যেমন ড্রু টেলর দেখিয়েছেন, -d এর সাথে শাখা মুছে ফেলা কেবল শাখাটি "পুরোপুরি একীভূত" হয়েছে কিনা তা নির্ধারণে বর্তমান হেডকে বিবেচনা করে । এটি এমনকি যদি শাখা অভিযোগ করবে হয় কিছু অন্যান্য শাখা সঙ্গে মিশে গিয়ে। ত্রুটি বার্তাটি অবশ্যই এই বিষয়ে পরিষ্কার হতে পারে ... আপনি মুছে ফেলার আগে মার্জ করা শাখাটি চেকআউট করতে পারেন, বা কেবল গিট শাখা -D ব্যবহার করতে পারেন। মূলধন -D পুরোপুরি চেকটিকে ওভাররাইড করবে।


2
বর্তমান হেড সম্পর্কে অংশটি এটি আমার জন্য স্থির করেছে। আমার মাস্টার বৈশিষ্ট্যযুক্ত শাখার চেয়ে আলাদা ছিলেন যার মধ্যে আমি বিরোধী শাখাটি তৈরি করেছি: ডি
উইকি.মেগা 9

1
গিট শিখার জন্য কারও কাছে "কারেন্ট" শব্দটি "হেড" দিয়ে অপ্রয়োজনীয় মনে হয়? একটি uncurrent প্রধান হিসেবে যেমন জিনিস আছে - সংজ্ঞা মাথায় হয় বর্তমান শাখা। আমি কিছু অনুপস্থিত করছি? আমি মনে করি আপনি "কারেন্ট ব্রাঞ্চ" বা "হেড" বলতে পারেন তবে "কারেন্ট হেড" না।
লাকাটা

এটিকে পরিবর্তন / কনফিগার করার কোনও উপায় আছে কি (উদাহরণস্বরূপ, এটি সর্বদা বিপরীতমুখী হয় origin/master?) আমার ধারণা অনুমান করা হয় যে origin/masterপ্রথমে চেক করা খুব বেশি কঠোর নয়, তবে এটি কেবল এক ধরণের অদ্ভুত প্রবাহের মতো অনুভব করে - কেন আমাকে origin/masterস্থানীয়ভাবে চেক আউট করতে হবে? আমার পরিবর্তনগুলি সেখানে মিশে গেছে তা যাচাই করার জন্য?
আলেক

15

আমি সেহের উত্তরটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি।

একত্রিত হয়নি এমন কমিটগুলি সন্ধান করতে কেবল ব্যবহার করুন:

git log feature-branch ^master --no-merges

14

আমার আজকের এই ঘটনাটি ঘটেছিল, কারণ আমি আমার প্রথম বৈশিষ্ট্যটি শাখাটিকে মাস্টারে ফিরিয়ে দিচ্ছিলাম। যেমন কেউ এসও-তে অন্য কোনও সুত্রে বলেছিল, কৌশলটি শাখাটি মুছে ফেলার চেষ্টা করার আগে মাস্টারে ফিরে গিয়েছিল। মাস্টার ইন একবার, গিট কোনও সতর্কতা ছাড়াই শাখাটি মুছে ফেলতে খুশি হয়েছিল।


7
এখানে সুনির্দিষ্ট সমস্যাটি মনে হচ্ছে না, তবে আপনি এখনই যে সমস্যার বর্ণনা দিয়েছেন তাতে আমি ছুটে এসেছি, তাই ধন্যবাদ!
ড্যানিয়েল বাকমাস্টার

4

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

শাখাটি experimentঅন্য একটি শাখায় "পুরোপুরি একীভূত" হওয়ার জন্য, এর টিপ কমিটটি অবশ্যই অন্য শাখার ডগের পূর্বপুরুষ হতে হবে, যা অন্য শাখার experimentউপসেটে কমিট করে । এটি মুছে ফেলা নিরাপদ করে তোলে experiment, কারণ এর সমস্ত কমিটগুলি অন্য শাখার মাধ্যমে সংগ্রহস্থলের ইতিহাসের অংশ হিসাবে থাকবে। এটি অবশ্যই "সম্পূর্ণরূপে" একীভূত হতে হবে, কারণ এটি ইতিমধ্যে বেশ কয়েকবার একত্রীভূত হয়ে থাকতে পারে, তবে এখন অন্য সংস্থায় অন্তর্ভুক্ত না হওয়া সর্বশেষ মার্জ হওয়ার পরে কমিটস যুক্ত হয়েছে।

গিট সংগ্রহস্থলের অন্যান্য প্রতিটি শাখা পরীক্ষা করে না; মাত্র দুই:

  1. বর্তমান শাখা (হেড)
  2. উজানের শাখা, যদি সেখানে থাকে

experimentআপনার ক্ষেত্রে যেমন "আপস্ট्रीम শাখা" সম্ভবত রয়েছে origin/experiment। যদি experimentবর্তমান শাখায় পুরোপুরি একীভূত হয়, তবে গিট কোনও অভিযোগ ছাড়াই এটি মুছে ফেলেন। যদি তা না হয় তবে এটি সম্পূর্ণরূপে এর উজানের শাখায় একত্রিত হয়, তবে গিট একটি সতর্কতা মনে করার সাথে এগিয়ে চলেছে:

warning: deleting branch 'experiment' that has been merged
to 'refs/remotes/origin/experiment', but not yet merged to
HEAD.
Deleted branch experiment (was xxxxxxxx).

যেখানে xxxxxxxxকমিট আইডি নির্দেশ করে indicates এর প্রবাহে পুরোপুরি একত্রিত হওয়া ইঙ্গিত দেয় যে কমিটগুলি experimentমূল উত্স ভাণ্ডারে ঠেলে দেওয়া হয়েছে, যাতে আপনি যদি তাদের এখানে হারিয়ে ফেলেন তবে সেগুলি কমপক্ষে অন্য কোথাও রক্ষা পেতে পারে।

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


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


3

একত্রিত না হওয়া পরিবর্তনগুলি দেখতে, আমি এটি করেছি:

git checkout experiment
git merge --no-commit master

git diff --cached

দ্রষ্টব্য: এটি এতে নেই masterএমন পরিবর্তনগুলি দেখায় experiment

ভুলে যাবেন না:

git merge --abort

আপনি যখন চেহারা শেষ।


@ ইগরগানাপলস্কি ডুনো ঠিক ঠিক যদিও, সাধারণত man git-resetএবং গিট রিসেট আদেশগুলি রাষ্ট্রীয় সমস্যাগুলি থেকে পুনরুদ্ধার করার জন্য যথেষ্ট।
থারস্মমনার

3

ব্যাখ্যা সহ সহজ সমাধান (দ্বিগুণ পরীক্ষিত সমাধান) (এর আগে সমস্যার মুখোমুখি হয়েছি)

সমস্যাটি হ'ল:

1- আমি কোনও শাখা মুছতে পারি না

2- টার্মিনালটি একটি সতর্কতা বার্তা প্রদর্শন করে যে কিছু কমিট রয়েছে যা এখনও অনুমোদিত নয়

3- আমি জেনেছি যে আমি মাস্টার এবং শাখা পরীক্ষা করেছি এবং তারা অভিন্ন (আপ টু ডেট)

সমাধান:

git checkout master
git merge branch_name
git checkout branch_name
git push
git checkout master
git branch -d branch_name

ব্যাখ্যা:

যখন আপনার শাখাটি উজানের দূরবর্তী শাখায় সংযুক্ত থাকে (গিথুব, বিটবাকেট বা যেকোন কিছুতে), আপনাকে এটিকে মাস্টারের সাথে একীভূত করতে (ধাক্কা দেওয়া) দরকার এবং আপনাকে নতুন পরিবর্তনগুলি (কমিট) রিমোট রেপোতে (গিথুব, বিটবাকেট বা যাই হোক না কেন - শাখা থেকে,

আমি আমার কোডটিতে যা করেছি তা হ'ল আমি মাস্টার পরিবর্তন করেছি, তারপরে শাখাটিটি এতে মার্জ করুন (তারা আপনার স্থানীয় মেশিনে অভিন্ন কিনা তা নিশ্চিত করার জন্য), তারপরে আমি আবার শাখায় স্যুইচ করেছি এবং আপডেটগুলি বা রিমোটটিকে অনলাইনে পরিবর্তন করেছি "গিট পুশ" ব্যবহার করে রেপো।

এর পরে, আমি আবার মাস্টারের কাছে চলে এলাম, এবং শাখাটি মুছে ফেলার চেষ্টা করেছি, এবং সমস্যাটি (সতর্কতা বার্তা) অদৃশ্য হয়ে গেল, এবং শাখাটি সফলভাবে মুছে ফেলা হয়েছে


3

আপনি সহজেই বুঝতে পারেন:

গিট লগ - চেরি মাস্টার ... পরীক্ষামূলক

--cherry বিকল্প একটি প্রতিশব্দ হয় --right-only --cherry-mark --no-merges

গিট-লগ ম্যান পেজ ড

আউটপুটটি আমাদের পাশের কমিটের মধ্যে সীমাবদ্ধ করা এবং গিট লগ - চ্যারিটি আপস্ট্রিম ... মাইব্র্যাঙ্ক, গিট চেরি আপস্ট্রিম মাইব্র্যাঙ্কের মতো একটি কাঁটাযুক্ত ইতিহাসের অন্য দিকে প্রয়োগ করা হয়েছে এমনগুলিকে চিহ্নিত করার জন্য এটি কার্যকর।

অবগতির জন্য। --cherry-pickসমমানের কমিট বাদ দেয় কিন্তু --cherry-marksহয় না। এটি স্ট্রিম এবং সহ-কর্মক্ষম পাবলিক ব্রাঞ্চের মধ্যে আপডেট পরিবর্তনগুলি পুনরায় সন্ধান এবং জোর করা কার্যকর


1

আমার স্থানীয় গিটটিতে আমার প্রবাহের শাখা ছিল না। আমি মাস্টার, গিট চেকআউট-বি মাইব্র্যাঞ্চ থেকে একটি স্থানীয় শাখা তৈরি করেছি। আমি প্রবাহের গিটের উপর বিটবাকেট জিইউআই দিয়ে একটি শাখা তৈরি করেছি এবং আমার স্থানীয় শাখা (মাইব্র্যাঞ্চ )টিকে সেই প্রবাহ শাখায় ঠেলা দিয়েছি। প্রবাহিত শাখাটি পুনরুদ্ধার করার জন্য একবার আমি আমার স্থানীয় গিটের উপর গিট আনার পরে আমি গিট শাখা -D মাইব্র্যাঞ্চ করতে পারি।


0

আমি বিশ্বাস করি যে পতাকাটি --forceআপনি সত্যই সন্ধান করছেন। git branch -d --force <branch_name>জোর করে শাখাটি মুছতে কেবল ব্যবহার করুন ।

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