আমার একত্রিত হওয়া বিরোধগুলি সমাধানের পরে আমি কীভাবে মার্জটি শেষ করব?


282

আমি গিট কমিউনিটি বইয়ের বেসিক ব্র্যাঞ্চিং এবং মার্জিং বিভাগটি পড়েছি ।

তাই আমি এটা অনুসরণ এবং এক শাখা তৈরি করুন: experimental

তখন আমি:

  1. পরীক্ষামূলক শাখায় স্যুইচ করুন (গিট চেকআউট পরীক্ষামূলক)
  2. গুচ্ছ পরিবর্তন
  3. এটি কমিট (গিট কমিট -a)
  4. মাস্টার শাখায় স্যুইচ করুন (গিট চেকআউট মাস্টার)
  5. কিছু পরিবর্তন এবং সেখানে প্রতিশ্রুতিবদ্ধ
  6. পরীক্ষামূলকভাবে ফিরে যান (গিট চেকআউট পরীক্ষামূলক)
  7. পরীক্ষামূলক (গিট মার্জ মাস্টার) এ মাস্টার পরিবর্তনকে মার্জ করুন
  8. কিছু দ্বন্দ্ব আছে তবে আমি তাদের সমাধানের পরে, আমি 'গিট অ্যাড মাইফাইল' করেছি

  9. এবং এখন আমি আটকে আছি, আমি আর মাস্টার ফিরে যেতে পারি না

যখন আমি করি

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

এবং আমি করেছিলাম:

$ git rebase --abort

কোন পুনর্বাসনের কাজ চলছে?

এবং আমি করেছিলাম :

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

আমি কী করতে পারি যাতে আমি আমার মাস্টার শাখায় ফিরে যেতে পারি?


আমি দ্বন্দ্ব সংশোধন করার পরে, সংযোজনটি সম্পাদন করব এবং তারপরে অঙ্গীকার সম্পাদনের চেষ্টা করব git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts", এর ফলস্বরূপ fatal: cannot do a partial commit during a merge.। এবং অবশ্যই, "আংশিক প্রতিশ্রুতিবদ্ধ" গিট ম্যান পৃষ্ঠাগুলিতে কোথাও নথিভুক্ত বা আলোচিত বলে মনে হচ্ছে না। কী ভাঙা গাধা সরঞ্জামটির git mergePlease, commit your changes before you can merge.
ফিক্সের

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

1
সুতরাং, কেন সেই কেস স্টাডি বোধগম্যতার জন্য যত্ন সহকারে পড়ার যোগ্যতা অর্জন করে, তবে ম্যানপেজগুলি না করে কেন? @jww
jthill

1
ঠিক আছে, গিটটি পরিষ্কারভাবে ব্যবহারের জন্য আপনি অর্জনের জন্য প্রস্তুতের চেয়ে আরও ভাল পড়া বোধগম্যতা প্রয়োজন। আপনি সম্ভবত এটির চেয়ে নিশ্চিত আমি সম্ভবত আরও নিশ্চিত g
jthill

1
গিট 2.12 (কিউ 1 2017) এর মাধ্যমে, আপনি শীঘ্রই কেবল একটি করবেন git merge --continue। দেখুন নিচের আমার উত্তর
VonC

উত্তর:


267

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


যদি আপনি কমিট করতে "গিট গুই এবং" ব্যবহার করেন - আপনি বুঝতে পারবেন না যে আপনার শাখার অবস্থা আর "মার্জিং" নয়। আপনার শাখার অবস্থা সঠিক কিনা তা নিশ্চিত করতে একটি "গিট স্ট্যাটাস" অনুসরণ করা সহায়ক।
টনি আশওয়ার্থ

4
git commit -am "your commit message"একসাথে যুক্ত এবং প্রতিশ্রুতিবদ্ধ সম্পাদন করার চেষ্টা করুন ।
শে

3
git commitকাজ করে এবং এটি আপনার জন্য ডিফল্ট মার্জ কমিট বার্তাটি জনসাধারণের জন্য ব্যবহার করা ভাল। আমি "গিট কমিট-এ্যাম" এড়াচ্ছি যেহেতু এটি বার্তাটি ওভাররাইড করবে
আরিজুন

1
ব্যবহার করে দেখুন git push
আল্পার

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

157

আমার একত্রিত হওয়া বিরোধগুলি সমাধানের পরে আমি কীভাবে মার্জটি শেষ করব?

গিট 2.12 (কিউ 1 2017) এর সাথে আপনার আরও প্রাকৃতিক আদেশ হবে:

git merge --continue

দেখুন c7d227d কমিট দ্বারা (15 ডিসেম্বর 2016) জেফ কিং ( peff)
দেখুন কমিট 042e290 , কমিট c261a87 , কমিট 367ff69 দ্বারা (14 ডিসেম্বর 2016) ক্রিস Packham ( cpackham)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে 05f6e1b কমিট , 27 ডিসেম্বর 2016)

দেখুন 2.12 রিলিজ নোট

merge: যোগ করা ' --continue' এর জন্য সমার্থক হিসেবে বিকল্পটি ' git commit'

' git merge' --continueবিকল্পটি শিখুন যা এটি সম্পূর্ণ করে মেশিনকে 'চালিয়ে' যেতে দেয়।
বিরোধগুলি সমাধানের পরে মার্জ সম্পূর্ণ করার traditionalতিহ্যগত উপায় হল ' git commit' ব্যবহার করা ।
এখন ' git rebase' এবং ' git cherry-pick' একটি ' --continue' বিকল্পের মতো কমান্ডের সাহায্যে ' ' এ বিকল্পটি যুক্ত git mergeকরে একটি সামঞ্জস্যপূর্ণ UI উপস্থাপন করা হয়।


আমি কীভাবে সম্প্রতি Q1 2017 এ 2.12 এ এটি যুক্ত হয়েছিল সে সম্পর্কে একটি মন্তব্য পোস্ট করার জন্য প্রস্তুত ছিলাম, তবে তারপরে আমি আপনার উত্তরের প্রথম লাইনটি আবার পড়ি। ২.১০ সংস্করণে বিকল্পটি আমার জন্য খুঁজে পাওয়া যায়নি!
সিজেসিমন

1
আমি গিট একীভূত করার চেষ্টা করেছি - নিয়মাবলী এবং গিট বাশ কমান্ড হিসাবে এটি সনাক্ত করতে সক্ষম হয় নি। তবে যা কাজ করেছে তা ছিল গিট কমিট - এম "কমিট বার্তা"
মিমি

2
@ মিমি ঠিক আছে, তবে আপনি কি একটি গিট 2.12 বা আরও বেশি ব্যবহার করছেন?
ভোনসি

@ ভনসি আপনি সঠিক, আমি গিট এর একটি পুরানো সংস্করণ ব্যবহার করছি!
মিমি

23

আপনি যদি কোনও মার্জ / রিবেস চলাকালীন আটকে থাকেন তবে আপনি সর্বদা পারেন

git reset --hard

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


15
বাধ্যতামূলক সতর্কতা: git reset --hardআপত্তিজনক পরিবর্তনগুলি ছুঁড়ে ফেলেছে
জেফ্রি হেল

2
শুধু কেন নয় git merge --abort, যার কিছু হারানোর ঝুঁকি নেই?
আলেকজান্ডার জর্জ

11

ঠিক আছে git commit

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

মার্জগুলিতে জীবনকে আরও সহজ করার জন্য kdiff3 ইনস্টল করুন এবং এটিকে মার্জেটুল হিসাবে কনফিগার করুন। নির্দেশাবলী: http://doodkin.com/2016/05/29/git- विसरा-easy-github-this-branch-has-conflicts-that-must-be-resolve-use-the-command-line/

এই পৃষ্ঠায় এই ভিডিওটি রয়েছে: https://www.youtube.com/watch?v=Cc4xPp7Iuzo


11

আপনি যখনই কমান্ড ব্যবহার করে দুটি শাখা মার্জ করবেন তখন git merge brancha branchbদুটি সম্ভাবনা থাকে:

  1. একটি শাখা (ব্রাঞ্চ বলতে পারি) অন্য শাখার কাছে তার শাখার ইতিহাস অনুসরণ করে (ব্রাঞ্চব বলে দেওয়া যায়) পৌঁছানো যায় this এক্ষেত্রে গিটটি সাম্প্রতিক শাখার দিকে ইঙ্গিত করার জন্য মাথাটি দ্রুত-ফরওয়ার্ড করে (এই ক্ষেত্রে শাখাটি)।

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

চালান git logকমিট পরে আপনি দুই অ-মতভেদ শাখা একীভূত হয়েছে তা দেখতে।

মার্জিং শাখাগুলির মধ্যে মার্জ কোন্দল রয়েছে যখন এখন আকর্ষণীয় ক্ষেত্রে ফিরে আসা। আমি এই পৃষ্ঠাটি থেকে https://git-scm.com/book/en/v2/Git-Branching- বেসিক- ব্র্যাচিং- এবং- মার্জিং থেকে উদ্ধৃতি দিচ্ছি

গিট স্বয়ংক্রিয়ভাবে একটি নতুন মার্জ কমিট তৈরি করে নি। আপনি দ্বন্দ্বটি সমাধান করার সময় এটি প্রক্রিয়াটিতে বিরতি দিয়েছে। একত্রীকরণের বিরোধের পরে আপনি যদি কোনও ফাইলগুলি যে কোনও মুহুর্তে নিমজ্জিত হয় তা দেখতে চান, আপনি চালাতে পারেনgit status


সুতরাং যদি একত্রীকরণ বিরোধ রয়েছে, আপনার দ্বন্দ্বের সমাধান করতে হবে এবং স্টেজেজ এরিয়াতে আপনি git add filenameযে পরিবর্তনগুলি করেছেন তা যুক্ত করে git commit সংঘাতের কারণে গিট দ্বারা বিরতি দেওয়া কমান্ডটি ব্যবহার করে পরিবর্তনগুলি সংঘটিত করতে হবে I আমি আশা করি এটি আপনার ব্যাখ্যা করে প্রশ্ন. বিস্তারিত বোঝার জন্য উপরের লিঙ্কটি দেখুন। যে কোনও প্রশ্নের ক্ষেত্রে নীচে মন্তব্য করুন, আমি সাহায্য করে খুশি হব।


7

বিরোধগুলি ম্যানুয়ালি সমাধানের পরবর্তী পদক্ষেপগুলি হ'ল: -

  1. গিট অ্যাড
  2. গিট স্ট্যাটাস (এটি আপনাকে দেখাবে যে স্বয়ংক্রিয়ভাবে মার্জ প্রক্রিয়া চালিয়ে যাওয়ার জন্য কোন আদেশগুলি প্রয়োজনীয়)
  3. [কমান্ড Git প্রস্তাব দেওয়া, যেমন git merge --continue, git cherry-pick --continue, git rebase --continue]

16
কোনও গিট মার্জ নেই
হোলা সোয়

@ HolaSoyEduFelizNavidad এটি ভুল। বিরোধের পরে নীচে error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
জিৎ

5
রিবেস আছে
হোলা সোয়ে

git merge --continue, যা আমি যা করার চেষ্টা করছি তার ফলাফল error: unknown option 'continue'। আমি পরী নিশ্চিত যে আপনার উত্তরটি ভুল কারণ git-mergeম্যান পৃষ্ঠাটি এটি তালিকাবদ্ধ করে না। আপনি গিতের কোন সংস্করণ ব্যবহার করছেন? আমি ব্যবহার করছি git version 1.8.5.2 (Apple Git-48)। আমি ম্যাকপোর্টস দিয়েও চেষ্টা করেছি git version 2.9.3
jwww

1
সাধারণ একীভূত হওয়ার জন্য git commit
গিটার

2

আপনি দুটি সংহত করার চেষ্টা করছেন এমন দুটি শাখা একই ফলের একই অংশে পরিবর্তিত হলে একটি মার্জ সংঘাত ঘটে। আপনি এর সাথে বিরোধের একটি তালিকা তৈরি করতে পারেনgit status

যখন বিবাদযুক্ত রেখার মুখোমুখি হয়, গিট ভিজ্যুয়াল সূচকগুলির সাথে প্রভাবিত ফাইলগুলির বিষয়বস্তু সম্পাদনা করবে যা দ্বন্দ্বপূর্ণ সামগ্রীর উভয় দিক চিহ্নিত করে।

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

আপনি যখন আপনার দ্বন্দ্বযুক্ত ফাইলগুলি ঠিক করেন এবং আপনি মার্জ করতে প্রস্তুত হন, আপনাকে যা করতে হবে তা চালানো git addএবং git commitমার্জ কমিট জেনারেট করা। প্রতিশ্রুতিবদ্ধ হয়ে গেলে, git pushশাখায় পরিবর্তনগুলি।

রেফারেন্স নিবন্ধ: গীত একত্রীকরণ


2

সমস্ত ফাইল যুক্ত হওয়ার পরে, পরবর্তী পদক্ষেপটি " গিট কমিট " "।

"গিট স্ট্যাটাস" কী করণীয় তা পরামর্শ দেবে: যুক্ত করার মতো ফাইলগুলি নীচে নীচে তালিকাভুক্ত হবে এবং সেগুলি শেষ হয়ে গেলে এটি শীর্ষে একটি অঙ্গীকারের পরামর্শ দেবে, যেখানে এটি বর্তমান শাখার মার্জ স্থিতির ব্যাখ্যা দেয়।


1

প্রথম যে বিষয়টি আমি পরিষ্কার করতে চাই তা হ'ল শাখার নামগুলি একটি নির্দিষ্ট প্রতিশ্রুতিগুলির কেবলমাত্র একটি উপনাম। একটি প্রতিশ্রুতিবদ্ধতা হ'ল গিটটি কীভাবে কাজ করে, যখন আপনি টানুন, মেশান এবং আরও এগিয়ে ধাক্কা। প্রতিটি কমিটের একটি অনন্য আইডি থাকে।

আপনি যখন it গিট একীভূত করবেন, আসলে যা ঘটছে তা হ'ল গিটটি আপনার বর্তমান শাখাটিকে রেফারেন্সযুক্ত শাখায় দ্রুত ফরোয়ার্ড করার চেষ্টা করছে (অন্য কথায় উভয় শাখার নাম একই প্রতিশ্রুতি দেখায়।) এই দৃশ্যটি গিটের পক্ষে সবচেয়ে সহজ ডিল করতে, যেহেতু কোনও নতুন প্রতিশ্রুতি নেই। আপনার শাখাটি শীতল হয়ে যাওয়া লিলিপ্যাডের উপরে মাস্টার লাফানোর কথা ভাবুন। --No-ff পতাকা সেট করা সম্ভব, কোনও ক্ষেত্রে দ্বন্দ্ব ছিল কিনা তা বিবেচনা না করেই গিট একটি নতুন অঙ্গীকার তৈরি করবে।

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

তৃতীয় দৃশ্যটি হ'ল যখন বিবাদ রয়েছে গিটটি স্বয়ংক্রিয়ভাবে সমাধান করতে পারে না। এই ক্ষেত্রে আপনাকে ম্যানুয়ালি তাদের মার্জ করতে হবে। আমার মতে আরাক্সিস মার্জ বা পি 4 তম (ফ্রি) এর মতো একীভূতকরণের সাথে এটি করা সবচেয়ে সহজ। যেভাবেই হোক না কেন, আপনাকে প্রতিটি ফাইল এক এক করে করতে হবে। যদি মার্জটি কখনও আটকে থাকে বলে মনে হয়, এটির সাথে ঠেলাঠেলি করতে $ গিট মার্জ - কনটিনিউ ব্যবহার করুন। গিটটি আপনাকে বলতে হবে এটি চালিয়ে যেতে না পারলে এবং যদি হয় তবে কেন না। আপনি যদি মনে করেন যে আপনি কোনও একত্রে মার্জটি বিলম্ব করেছেন, আপনি $ গিট মার্জ --abort করতে পারবেন এবং যে কোনও মার্জ করা পূর্বাবস্থায় ফিরে যাবে এবং আপনি আবার শুরু করতে পারেন। আপনি যখন সম্পন্ন করবেন, আপনি সংযুক্ত প্রতিটি ফাইলই একটি সংশোধিত ফাইল হবে যা যুক্ত এবং প্রতিশ্রুতিবদ্ধ হওয়া দরকার। Verify গিট স্ট্যাটাস সহ ফাইলগুলি কোথায় রয়েছে তা আপনি যাচাই করতে পারেন। আপনি যদি এখনও মার্জ হওয়া ফাইলগুলি প্রতিশ্রুতিবদ্ধ না হন। মার্জ সম্পূর্ণ করার জন্য আপনার এটি করা দরকার।


0

দেরি হতে পারে। এটি হ'ল কারণ আপনার গিট হেড আপডেট হয়নি। এই প্রশংসা যে সমাধান করবে git reset HEAD

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