আমি একীভূত সংঘাতের মধ্যে দৌড়েছি। আমি কীভাবে মার্জটি বাতিল করতে পারি?


2534

আমি git pullএকীভূত সংঘাত ব্যবহার করেছি এবং করেছি :

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

আমি জানি যে ফাইলটির অন্য সংস্করণটি ভাল এবং আমার খনিটি খারাপ তাই আমার সমস্ত পরিবর্তন পরিত্যাগ করা উচিত। কিভাবে আমি এটি করতে পারব?


30
আমি বুঝতে পেরেছি যে এটি একটি অতি পুরানো প্রশ্ন, তবে আপনি কী পুরো মিশ্রণটি বাতিল করতে চান এবং আপনি যে শাখাটি নিমজ্জিত করছেন তা ছেড়ে দিতে চান , বা কেবলমাত্র একটি ফাইলকে একটি বৃহত্তর সংশ্লেষের অংশ হিসাবে অগ্রাহ্য করুন, অন্য সমস্ত ফাইলকে মেশাতে দিন স্বাভাবিক? আমার কাছে আপনার শিরোনামটি প্রাক্তনকে বোঝায়, আপনার প্রশ্ন সংস্থার উত্তরটি চাই wants উত্তরগুলি উভয়ই করে, কিছুই পরিষ্কার করে না দিয়ে।
rjmunro

প্রতিশ্রুতি দেওয়ার ক্ষেত্রে আমি অনুরূপ মামলা পেয়েছি যে স্বয়ংক্রিয়ভাবে সংহত হওয়া ব্যর্থ হয়েছে; বিবাদগুলি স্থির করুন এবং তারপরে ফলাফলটি প্রতিশ্রুতি দিন:[rejected] gh-pages -> gh-pages (non-fast-forward)
চেতনাবাহন

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

উত্তর:


2218

যেহেতু আপনার pullব্যর্থ হয়েছিল তখন HEAD(নয় HEAD^) আপনার শাখায় সর্বশেষ "বৈধ" প্রতিশ্রুতিবদ্ধ:

git reset --hard HEAD

আপনি চাইছেন যে অন্য টুকরাটি হ'ল তাদের পরিবর্তনগুলিকে আপনার পরিবর্তনগুলিকে বেশি চালিয়ে দেওয়া।

গিটের পুরানো সংস্করণ আপনাকে "তাদের" একত্রিত করার কৌশলটি ব্যবহার করার অনুমতি দিয়েছে:

git pull --strategy=theirs remote_branch

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

git fetch origin
git reset --hard origin

49
হার্ড রিসেট করার পরিবর্তে, আপনি এটিকে আরও দানাদার স্তরে নিয়ে আসতে পারেন: git fetch origin -> git reset origin (soft reset, your changes are still present) -> git checkout file_to_use_their_version_of another_file (steamroll your own changes back to match the origin) আমি আর কখনও গিট টান ব্যবহার করি না। যেহেতু আমার সর্বশেষ কোড এবং উত্সের লড়াইয়ের মধ্যে, উত্সটি সর্বদা জিততে হবে, আমি সর্বদা git fetchএবং git rebase origin। এটি আসলে আমার একত্রীকরণ এবং সংঘাত এবং কিছুটা এবং এর মধ্যে বিরোধ সৃষ্টি করে।
Kzqai

7
আমি রাজী. আমি প্রথমে আনতে এবং তারপরে প্রবাহের পরিবর্তনগুলি ( git log ..@{upstream}বা git diff ..@{upstream}) পরীক্ষা করতে চাই । এর পরে, আপনার মত, আমি আমার কাজটি পুনরায় প্রত্যাখ্যান করব।
প্যাট নটজ

162
আরও সাম্প্রতিক উত্তরে যেমন উল্লেখ করা হয়েছে, সংস্করণ 1.6.1 অনুসারে, 'গিট রিসেট
ম্যাট বল

5
আমি ব্যবহৃত git merge -X theirs remote_branchপরিবর্তে git pull --strategy=theirs remote_branchযেমন theirsএকজন বিকল্প মত দেখাচ্ছেrecursive
MLT

14
git merge --abortঅনেক বেশি পছন্দসই।
ড্যানিয়েল ক্যাসিডি

1955

যদি আপনার গিট সংস্করণটি হয়> = 1.6.1, আপনি ব্যবহার করতে পারেন git reset --merge

এছাড়াও, @ মিশেল জনসন যেমন উল্লেখ করেছেন, আপনার গিট সংস্করণটি> = = 1.7.4 হয়, আপনিও এটি ব্যবহার করতে পারেন git merge --abort

সর্বদা হিসাবে, নিশ্চিত হয়ে নিন যে আপনি মার্জ শুরু করার আগে আপনার কোনও আপত্তিজনক পরিবর্তন নেই।

থেকে Git একত্রীকরণ man পৃষ্ঠা

git merge --abortgit reset --mergeযখন MERGE_HEADউপস্থিত হয় সমান ।

MERGE_HEAD যখন একত্রীকরণের প্রক্রিয়া চলছে তখন উপস্থিত থাকে।

এছাড়াও, মার্জ করা শুরু করার সময় অননুমোদিত পরিবর্তনগুলি সম্পর্কে:

আপনার যদি পরিবর্তন হয় আপনি মার্জ শুরু করার আগে প্রতিশ্রুতি রাখতে চান না, কেবল মার্জ git stashকরার আগে এবং মার্জ git stash popশেষ করে বা এটি বাতিল করার পরে।


3
আকর্ষণীয় - তবে ম্যানুয়ালটি আমাকে ভয় দেখায়। কখন ব্যবহার করা উপযুক্ত? আপনি কখন alচ্ছিক নির্দিষ্ট করতে হবে <commit>? #GitMoment: -o
কনিকে

1
আপনি যখন শুরু থেকে মার্জটি আবার করতে চান আপনি সাধারণত এটি ব্যবহার করবেন d আমাকে কখনই theচ্ছিক প্রতিশ্রুতি নির্দিষ্ট করতে হয়নি, তাই ডিফল্ট (কোনও বিকল্প নেই <কমিট>) ঠিক আছে।
কার্ল

44
এই উত্তরে যদি আরও বেশি ভোট পেতাম! এই মুহুর্তে, এটি অনেক ক্ষেত্রে সর্বাধিক প্রাসঙ্গিক সমাধানের মতো বলে মনে হচ্ছে।
জে টেলর

1
এমনকি অনির্দিষ্ট পরিবর্তনের সাথেও গিট মার্জ হওয়ার আগে রাজ্য পুনরুদ্ধার করতে সক্ষম হয়েছিল। নিস!
T3rm1

2
git merge --abortশুধু কি প্রতিশব্দ git reset --merge? নামটি অবশ্যই আরও অর্থবোধ করে, তবে এর কি একই কার্যকারিতা রয়েছে?
টিখন জেলভিস

516
git merge --abort

বর্তমান বিরোধ নিষ্পত্তি প্রক্রিয়াটি বাতিল করুন এবং প্রাক-মার্জ রাষ্ট্রটি পুনর্গঠনের চেষ্টা করুন।

একত্রীকরণ শুরু হওয়ার পরে যদি সেখানে অনির্দিষ্ট কর্মক্ষেত্রের পরিবর্তনগুলি উপস্থিত ছিল, git merge --abortতবে কিছু ক্ষেত্রে এই পরিবর্তনগুলি পুনর্গঠন করতে অক্ষম হবে। অতএব গিট একীভূতকরণ চালানোর আগে সর্বদা আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ বা স্ট্যাশ করার পরামর্শ দেওয়া হয়।

git merge --abortgit reset --mergeযখন MERGE_HEADউপস্থিত হয় সমান ।

http://www.git-scm.com/docs/git-merge


16
এটি git v1.7.4 থেকে পাওয়া যায়। এটি গিট রিসেট - ডুবে যাওয়ার জন্য একটি উপনাম।
মাইকেল জনসন

162

এটি এত সহজ।

git merge --abort

আপনি যখন এই ধরণের সমস্যায় পড়েন এবং গিট স্ট্যাটাস কমান্ডটি চালান তখন গিট নিজেই আপনাকে সমাধান দেখায়।

git status

আশা করি এটি মানুষের সহায়তা করবে।


97

আমি মনে করি এটি git resetআপনার প্রয়োজন।

এর থেকে সাবধান থাকুন এর git revertঅর্থ, বলুন svn revert- সাবভার্শনে রিভার্টটি আপনার (স্বাক্ষরিত) পরিবর্তনগুলি বাতিল করে দেবে, রিপোজিটরি থেকে ফাইলটিকে বর্তমান সংস্করণে ফিরিয়ে দেবে, যেখানে git revert"পূর্বাবস্থায় ফিরে আসবে "।

git resetএর সমতুল্য হওয়া উচিত svn revert, এটি হ'ল আপনার অযাচিত পরিবর্তনগুলি বাতিল করুন।


76

এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে, আপনি সত্যিকার অর্থে মার্জটিকে বাতিল করতে চান না, কেবল একটি নির্দিষ্ট উপায়ে দ্বন্দ্ব সমাধান করুন।

পুনরায় সেট করার এবং আলাদা কৌশলটির সাথে একত্রীকরণ করার কোনও বিশেষ প্রয়োজন নেই। দ্বন্দ্বগুলি গিট দ্বারা সঠিকভাবে হাইলাইট করা হয়েছে এবং অন্য পক্ষের পরিবর্তনগুলি গ্রহণ করার প্রয়োজনীয়তা কেবল এই একটি ফাইলের জন্য।

একটি দ্বন্দ্ব গিমে নিমজ্জিত ফাইলের জন্য সূচীতে ফাইলটির সাধারণ বেস, স্থানীয় এবং দূরবর্তী সংস্করণগুলি উপলব্ধ করে। (এখান থেকে এগুলিকে 3-ওয়ে ডিফ সরঞ্জামে ব্যবহারের জন্য পড়া হয় git mergetool)) আপনি git showএগুলি দেখতে ব্যবহার করতে পারেন ।

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

রিমোট সংস্করণ ভারব্যাটিম ব্যবহার করার জন্য দ্বন্দ্ব সমাধানের সহজ উপায় হ'ল:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

বা, গিট সহ> = 1.6.1:

git checkout --theirs _widget.html.erb

5
ইঙ্গিতটির জন্য ধন্যবাদ এই দরিদ্র গিট ইউজার ইন্টারফেসের ধাক্কা না, যদিও?
পিটার

@ পিটার: আমি নিশ্চিত নই। পছন্দসই ফলাফলটি সহজ বিকল্পগুলির সাথে কয়েকটি বুনিয়াদি কমান্ডের সাথে অর্জনযোগ্য। আপনি কোন উন্নতির পরামর্শ দিবেন?
সিবি বেইলি

10
আমি মনে করি git 1.6.1কমান্ডটি অনেক অর্থবোধ করে, এবং ভাল। ঠিক এটাই আমি চাইতাম। আমি মনে করি প্রাক-1.6.1 সমাধানটি সুস্পষ্ট নয় এবং গিটের অন্যান্য অংশগুলির সম্পর্কে জ্ঞান প্রয়োজন যা মার্জ রেজোলিউশন প্রক্রিয়া থেকে পৃথক করা উচিত। তবে নতুন সংস্করণটি দুর্দান্ত!
পিটার

67

মত দৃশ্যের জন্য, আমি করেছি git fetchএবং git pull, তখন বুঝতে পেরেছিলাম যে উজানের শাখাটি মাস্টার শাখা নয়, যার ফলে অযাচিত দ্বন্দ্ব হয়েছিল।

git reset --merge 

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


44

মন্তব্যগুলি git reset --mergeএকটি উপনামের পরামর্শ দেয় git merge --abort। এটা তোলে মূল্য ঠাহর যে git merge --abortশুধুমাত্র সমতুল্য হয় git reset --mergeদেওয়া যে একটি MERGE_HEADউপস্থিত। এটি মার্জ কমান্ডের জন্য গিট সহায়তাতে পড়তে পারেন।

গিট একীভূতকরণ - ম্যাসেজ গিটার রিসেটের সমতুল্য - এমআরজিE_HEAD উপস্থিত থাকলে ডুবে যায়।

ব্যর্থ মার্জ হওয়ার পরে, যখন নেই MERGE_HEAD, ব্যর্থ মার্জটি পূর্বাবস্থায় ফেলা যায় git reset --merge, তবে অগত্যা তা নয় git merge --abortতারা একই জিনিসটির জন্য কেবল পুরানো এবং নতুন বাক্য গঠন নয়

ব্যক্তিগতভাবে, আমি git reset --mergeবর্ণিতটির মতো পরিস্থিতিগুলির জন্য অনেক বেশি শক্তিশালী এবং সাধারণভাবে ব্যর্থ হয়েছি s


2
এখানে আসলে "ব্যর্থ সংহত" বলতে কী বোঝায়? বিবাদ বা অন্য কিছুতে মার্জ? বা এটিকে পুনঃব্যবস্থাপনের জন্য: কখন মেরগা_ইইইইচডি উপস্থিত থাকে না? আমার ফলো-আপ প্রশ্নটি "গিট রিসেট - ড্যামেজ" এর আরও ভাল ব্যবহার বোঝার জন্য রয়েছে।
ইওকস

@ সম্প্রদায়গুলি git stash applyআমার জন্য একীভূত সংঘাত সৃষ্টি git merge --abortকরেছিল কিন্তু করার সময় সাহায্য করে git reset --mergeনি।
নিটজেল

27

যদি আপনি মার্জ সংঘাতের সাথে শেষ করেন এবং যদি প্রতিশ্রুতিবদ্ধ হওয়ার মতো কিছু না করেন তবে এখনও একটি মার্জ ত্রুটি প্রদর্শিত হচ্ছে। নীচের সমস্ত কমান্ড প্রয়োগ করার পরে,

git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin

অনুগ্রহপূর্বক অপসারণ করুন

.git \ index.lock

ফাইলটি [পুনরুদ্ধারের ক্ষেত্রে অন্য কোনও স্থানে পেস্ট কাটুন] এবং তারপরে আপনি কোন সংস্করণটি চান তার উপর নির্ভর করে নীচের যে কোনও কমান্ড প্রবেশ করান।

git reset --hard HEAD
git reset --hard origin

আশা করি এইটি কাজ করবে!!!


19

একটি বিকল্প, যা ওয়ার্কিং কপির রাজ্যের সংরক্ষণ করে তা হ'ল:

git stash
git merge --abort
git stash pop

আমি সাধারণত এর বিরুদ্ধে পরামর্শ দিই, কারণ এটি কার্যকরভাবে সাবভার্সনে মার্জ হওয়ার মতো কারণ এটি নিম্নলিখিত প্রতিশ্রুতিতে শাখা সম্পর্ককে দূরে সরিয়ে দেয়।


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

প্রশ্নের সেরা উত্তর
ফুয়াদ বোকারডাইন


3

আমি নিম্নলিখিতটি আমার জন্য কাজ করেছেন (একটি একক ফাইলকে প্রাক-একীভূত অবস্থায় ফিরিয়ে আনুন):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*

-5

Sourcetree

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

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