গিতে কীভাবে মার্জ সংঘাতগুলি সমাধান করবেন


4763

আমি কীভাবে গিটে সংযুক্তির বিরোধগুলি সমাধান করব?


30
নীচের ব্লগ পোস্টটি গিটের সাথে কীভাবে মার্জ সংঘাতকে পরিচালনা করতে পারে তার একটি খুব ভাল উদাহরণ দেয় বলে মনে হচ্ছে যা আপনাকে সঠিক পথে যেতে পারে।
গিটে

4
আপনি একটি মার্জ টুলটি কনফিগার করতে পারেন (kdiff3 jebaird.com/2013/07/08/… ) এবং তারপরে গিট মার্জেটুল ব্যবহার করুন। আপনি যখন বড় বিকাশকারী দলে কাজ করছেন আপনি সর্বদা মার্জ সংঘাতের মুখোমুখি হবেন।
গ্রেডি জি কুপার

ভুলে যাবেন না যে আপনি নিয়মিত ডাউন স্ট্রিমটি মার্জ করে সর্বাধিক মার্জ বিরোধগুলি প্রশমিত করতে পারেন!
পিপীলিকা


8
আকর্ষক প্রশ্ন: ২০০৮ সালে জিজ্ঞাসা করা হয়েছিল, এটি আসলে কী সম্পর্কে (ইহা জিইউআই সম্পর্কে? গিট কমান্ড সম্পর্কে? শব্দার্থ সম্পর্কে? পুশিং / টান বা কেবল সাধারণ দ্বন্দ্ব সম্পর্কে?) - সম্পূর্ণরূপে অনস্বীকার্য? 30 টি উত্তর, এগুলির সবগুলি (যতক্ষণ না তাত্ক্ষণিকভাবে এক নজরে দেখায়) কম বেশি বিভিন্ন ডিফ 3 এবং মার্জ সরঞ্জামগুলি সম্পর্কে চলছে, কোনওটিই গ্রহণযোগ্য নয়। শীর্ষ-ভোট প্রাপ্ত উত্তরে এমন একটি কমান্ডের উল্লেখ রয়েছে যা ডিফল্ট gitইনস্টলেশন সহ বাক্স থেকেও কাজ করে না । আমার জন্য আজ, ২০১৩, এসই সূচনা পৃষ্ঠায় হিট করার জন্য পরিচালিত, ১.৩ মিটার ভিউ এবং হাজার হাজার ভোট উভয় উপায়ে। আকর্ষনীয়।
AnoE

উত্তর:


2910

চেষ্টা করুন: git mergetool

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

@ জোশগ্লোভার মন্তব্য অনুসারে:

আদেশ

আপনি একটি ইনস্টল না করে অগত্যা একটি জিইউআই খোলেন না। git mergetoolআমার জন্য দৌড়ানোর ফলে vimdiffব্যবহার হয়েছে। পরিবর্তে আপনি এটি ব্যবহার করতে নিম্নলিখিত সরঞ্জামগুলির মধ্যে একটি ইনস্টল করতে পারেন: meld, opendiff, kdiff3, tkdiff, xxdiff, tortoisemerge, gvimdiff, diffuse, ecmerge, p4merge, araxis, vimdiff, emerge

vimdiffমার্জ সংঘাতগুলি সমাধানের জন্য নীচের নমুনা পদ্ধতিটি ব্যবহার করা হবে। এই লিঙ্কের উপর ভিত্তি করে

পদক্ষেপ 1 : আপনার টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালান

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

এটি ডিফল্ট একীকরণ সরঞ্জাম হিসাবে ভিমডিফ সেট করবে।

পদক্ষেপ 2 : টার্মিনালে নিম্নলিখিত কমান্ড চালান

git mergetool

পদক্ষেপ 3 : আপনি নিম্নলিখিত বিন্যাসে একটি vimdiff প্রদর্শন দেখতে পাবেন

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝

এই 4 ভিউ হয়

স্থানীয় - এটি বর্তমান শাখা থেকে ফাইল

বেস - সাধারণ পূর্বপুরুষ, ফাইল উভয় পরিবর্তনের আগে কীভাবে দেখেছে

রিমোট করুন - ফাইলটি আপনি নিজের শাখায় মার্জ করছেন

মার্জড - মার্জ ফলাফল, এটি যা রেপোতে সংরক্ষিত হয়

আপনি ctrl+ ব্যবহার করে এই দর্শনগুলির মধ্যে নেভিগেট করতে পারেন w। আপনি ctrl+ wঅনুসরণ করে সরাসরি মার্জড ভিউতে পৌঁছাতে পারেন j

এখানে এবং এখানে ভিমডিফ নেভিগেশন সম্পর্কে আরও তথ্য

পদক্ষেপ 4 । আপনি নিম্নলিখিতভাবে মার্জড ভিউটি সম্পাদনা করতে পারেন

আপনি যদি REMOTE থেকে পরিবর্তন পেতে চান

:diffg RE  

আপনি যদি বেস থেকে পরিবর্তন পেতে চান

:diffg BA  

আপনি যদি স্থানীয় থেকে পরিবর্তন পেতে চান

:diffg LO 

পদক্ষেপ 5 । সংরক্ষণ করুন, প্রস্থান করুন, প্রতিশ্রুতিবদ্ধ এবং পরিষ্কার

:wqa vi থেকে সংরক্ষণ করুন এবং প্রস্থান করুন

git commit -m "message"

git clean ডিফ সরঞ্জাম দিয়ে তৈরি অতিরিক্ত ফাইল (যেমন * .orig) সরান।


54
এফওয়াইআই আপনি git mergetool -yএকবারে প্রচুর ফাইল মার্জ করলে কয়েকটি কীস্ট্রোক সংরক্ষণ করতে আপনি ব্যবহার করতে পারেন ।
ডেভর

373
ভাল, আপনি একটি ইনস্টল না করে এটি অগত্যা একটি জিইউআই খুলবে না। git mergetoolআমার জন্য দৌড়ানোর ফলে vimdiffব্যবহার হয়েছে। পরিবর্তে আপনি এটি ব্যবহার করতে নিম্নলিখিত সরঞ্জামগুলির মধ্যে একটি ইনস্টল করতে পারেন: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis vimdiff emerge
জোশ গ্লোভার

31
শুভ পয়েন্ট জোশ। উবুন্টুতে আমি মেল্ডের সাথে শুভকামনা পেয়েছি, এর তিনটি উপায়ে মার্জ ডিসপ্লেটি খারাপ নয়। ওএসএক্স গিট একটি দুর্দান্ত ডিফল্ট বেছে নিয়েছে।
পিটার বার্নস

18
এটি কেডিফ 3 খুলল। যা আমি ব্যবহার করতে একেবারে কোন ক্লু নেই।
ডেভিড মারডোক

7
আপনি এখন তুলনায় 3 এর তুলনায়ও ব্যবহার করতে পারেন ( git mergetool -t bc3)।
এজেপ

1702

উপরে থেকে এখানে একটি সম্ভাব্য ব্যবহারের কেস:

আপনি কিছু পরিবর্তন আনতে যাচ্ছেন, তবে ওফ, আপনি আপ টু ডেট নন:

git fetch origin
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.

সুতরাং আপনি আপ-টু-ডেট হন এবং আবার চেষ্টা করুন তবে আপনার বিরোধ রয়েছে:

git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.

সুতরাং আপনি পরিবর্তনগুলি একবার দেখে নেওয়ার সিদ্ধান্ত নিয়েছেন:

git mergetool

ওহ আমার, ওহ আমার, উজানে কিছু জিনিস বদলেছে, তবে কেবল আমার পরিবর্তনগুলি ব্যবহার করতে ... না ... তাদের পরিবর্তনগুলি ...

git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"

এবং তারপরে আমরা একটি চূড়ান্ত সময় চেষ্টা করি

git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Ta-দা!


19
এটি অত্যন্ত সহায়ক ছিল কারণ আমার বাইনারি ফাইলগুলির (আর্ট অ্যাসেটস) সাথে মার্জ করার অনেক ত্রুটি ছিল এবং সেগুলি মার্জ করা সর্বদা ব্যর্থ বলে মনে হয়, তাই আমাকে নতুন ফাইলের সাথে এটি সর্বদা ওভাররাইট করা দরকার এবং "মার্জ" না
দিয়েই পেট্রোকেট

188
সাবধান হন! - ঘন্টা এবং --টির অর্থ বিপরীত হয়। --ours == রিমোট। --theirs == স্থানীয়। দেখুনgit merge --help
মেলমেল

57
আমার ক্ষেত্রে, আমি নিশ্চিত করি যে --theirs = দূরবর্তী সংগ্রহস্থল, --ours = আমার নিজস্ব স্থানীয় সংগ্রহস্থল। এটি @ মেল মন্তব্যের বিপরীত।
আর্য

24
স্পষ্টতই @ এমএমএল কেবল একটি রিবেস এ। দেখুনthis question
নবীন

184
ছেলেরা, "আমাদের" এবং "তাদের" আপনি মার্জ বা রিবেস করছেন কিনা তা সম্পর্কিত। যদি তুমি মার্জ , তারপর "আমাদিগের" অর্থ শাখা আপনি মধ্যে মার্জ করছি, এবং "তাদের" শাখা আপনি মার্জ করছি। যখন তুমি rebasing , তারপর "আমাদিগের" মানে কি করে করছি rebasing সম্মুখের , যদিও "তাদের" আপনাকে যে পুনর্বাসনা করতে চান সেই প্রতিশ্রুতিগুলিকে বোঝায়।

736

আমি সংশ্লেষ সরঞ্জামগুলি দ্বিধা বা সমাধান বুঝতে খুব কমই সহায়তা করে। আমি সাধারণত কোনও পাঠ্য সম্পাদকের দ্বন্দ্ব চিহ্নিতকারীগুলিকে এবং সাপ্লিমেন্ট হিসাবে গিট লগ ব্যবহার করে আরও সফল।

এখানে কয়েকটি টিপস দেওয়া হল:

টিপ ওয়ান

আমি খুঁজে পেয়েছি সবচেয়ে ভাল জিনিসটি হল "ডিফফ 3" মার্জ সংঘাতের স্টাইলটি ব্যবহার করা:

git config merge.conflictstyle diff3

এটি এই জাতীয় মতবিরোধ চিহ্নিত করে:

<<<<<<<
Changes made on the branch that is being merged into. In most cases,
this is the branch that I have currently checked out (i.e. HEAD).
|||||||
The common ancestor version.
=======
Changes made on the branch that is being merged in. This is often a 
feature/topic branch.
>>>>>>>

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

যদি দ্বন্দ্বটি কয়েকটি লাইন হয় তবে এটি সাধারণত সংঘাতকে খুব সুস্পষ্ট করে তোলে। (কোনও বিরোধের সমাধান কীভাবে করা যায় তা জানা খুব আলাদা; অন্য লোকেরা কী কাজ করছে সে সম্পর্কে আপনার সচেতন হওয়া দরকার you're আপনি যদি বিভ্রান্ত হন তবে সম্ভবত সেই ব্যক্তিকে আপনার ঘরে ডেকে আনা ভাল so যাতে আপনি কী দেখছেন তা তারা দেখতে পারে এ।)

যদি বিরোধ দীর্ঘায়িত হয়, তবে আমি তিনটি বিভাগের প্রত্যেককে "খনি", "সাধারণ" এবং "তাদের" এর মতো তিনটি পৃথক পৃথক ফাইলে কাটাতে এবং পেস্ট করব।

তারপরে দ্বন্দ্বের কারণ হিসাবে চিহ্নিত হওয়া দুটি পৃথক কুকুরগুলি দেখতে আমি নীচের কমান্ডগুলি পরিচালনা করতে পারি:

diff common mine
diff common theirs

এটি মার্জ সরঞ্জামটি ব্যবহার করার মতো নয়, যেহেতু মার্জ সরঞ্জামটিতে সমস্ত বিবাদহীন ডিফ হুক্সকেও অন্তর্ভুক্ত করা হবে। আমি বিভ্রান্তিকর হতে পারে।

টিপ টু

কেউ ইতিমধ্যে এটি উল্লেখ করেছেন, তবে দ্বন্দ্ব কোথা থেকে এসেছে এবং কীভাবে এটি পরিচালনা করতে হবে তা বোঝার জন্য প্রতিটি ভিন্নতার পিছনে উদ্দেশ্যটি বোঝা খুব কার্যকর।

git log --merge -p <name of file>

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

টিপ তিন

স্বয়ংক্রিয় সরঞ্জামের সাহায্যে আপনার পরিবর্তনগুলি যাচাই করুন।

আপনার যদি স্বয়ংক্রিয় পরীক্ষা থাকে তবে সেগুলি চালান। যদি আপনার কাছে লিন্ট থাকে , যে চালানো। যদি এটি কোনও বিল্টেবল প্রজেক্ট হয় তবে আপনার প্রতিশ্রুতি দেওয়ার আগে এটি তৈরি করুন ইত্যাদি etc. সব ক্ষেত্রেই আপনার পরিবর্তনগুলি কোনও কিছু ভঙ্গ করে না তা নিশ্চিত করার জন্য আপনাকে কিছুটা পরীক্ষা করা দরকার। (মুরগি, এমনকি সংঘাত বিহীন একীকরণের ফলে কার্যকরী কোডটি ভেঙে যায়))

টিপ ফোর

এগিয়ে পরিকল্পনা; সহকর্মীদের সাথে যোগাযোগ করুন।

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

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

কোডের বৃহত সোয়াথ জুড়ে কাটা বড় রিফ্যাক্টরিংগুলির জন্য, আপনাকে সিরিয়ালিভাবে কাজ করা বিবেচনা করা উচিত: প্রত্যেকে কোডের ওই অঞ্চলে কাজ করা বন্ধ করে দেয় যখন একজন ব্যক্তি সম্পূর্ণ রিফ্যাক্টরিং করে।

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

টিপ ফাইভ

আপনি যদি একীভূত হওয়ার বিষয়ে অনিশ্চিত হন তবে তা জোর করবেন না।

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

দীর্ঘমেয়াদে, এগিয়ে যাওয়ার পরিকল্পনা করা এবং অন্যেরা কী নিয়ে কাজ করছেন সে সম্পর্কে সচেতন হওয়াই মার্জ সংঘাতের প্রত্যাশার জন্য সেরা সরঞ্জাম এবং এগুলিকে কম সময়ে সঠিকভাবে সমাধান করার জন্য নিজেকে প্রস্তুত করুন।


6
ডিফফ 3 বিকল্পটি মার্জগুলির সাথে দুর্দান্ত বৈশিষ্ট্য। কেবলমাত্র জিইউআই যা আমি এসেছি তা দেখায় যে এটি পারফোর্সের p4merge, যা ইনস্টল করে পারফফোর্সের অন্যান্য সরঞ্জামগুলি (যা আমি ব্যবহার করি নি, তবে অভিযোগ শুনেছি) থেকে আলাদাভাবে ব্যবহার করা যেতে পারে।
alxndr

3
পুনর্বার চেষ্টাের পরে যার ফলে মার্জ সংঘাত সৃষ্টি হয়েছিল: it গিট লগ - নিমজ্জন -পি বিল্ড.এক্সএমএল আউটপুট: মারাত্মক: - মিরগE_হিড ছাড়া ডুবে?
এড র্যান্ডাল

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

git config merge.conflictstyle diff3- ধন্যবাদ জনাব. এটি আশ্চর্যজনক এবং ভাল 3 উপায় মার্জ জিইআইয়ের জন্য অনুসন্ধানের (এবং অর্থ প্রদানের) থেকে আমাকে মুক্তি দিয়েছে। আইএমও এই কারণে ভাল হিসাবে এটি সাধারণ পূর্বপুরুষ দেখায় যেমন স্থানীয় / দূরবর্তী উত্তম এবং গত কমিট লগ লাইন যা (আমি যতদূর জানি) কোন গুই করে দেখায়। কমিটগুলি অবশ্যই কোন কোডটি কোন শাখার সাথে সম্পর্কিত তা সনাক্ত করতে আপনাকে অবশ্যই সহায়তা করবে।
ffxsam

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

348
  1. কোন ফাইলগুলির মধ্যে দ্বন্দ্ব রয়েছে তা সনাক্ত করুন (গিটটি আপনাকে এটি জানাতে হবে)।

  2. প্রতিটি ফাইল খুলুন এবং বিভিন্নগুলি পরীক্ষা করুন; গিট তাদের নির্দিষ্ট করে দেয়। আশা করি প্রতিটি ব্লকের কোন সংস্করণটি রাখা উচিত তা স্পষ্ট হবে। কোডটি প্রতিশ্রুতিবদ্ধ এমন সহযোগী বিকাশকারীদের সাথে আপনার এটি আলোচনা করা দরকার।

  3. একবার আপনি কোনও ফাইলে দ্বন্দ্ব সমাধান করেছেন git add the_file

  4. একবার আপনি সমস্ত বিবাদগুলি সমাধান করে নিলে , git rebase --continueবা সম্পন্ন করার পরে গিট যা করতে আদেশ করেছিল তা করুন বা করুন।


38
@ জাস্টিন ফাইলগুলি ট্র্যাক করার পরিবর্তে গিটকে ট্র্যাকিং সামগ্রী হিসাবে ভাবুন । তারপরে এটি সহজেই দেখা যায় যে আপনি যে সামগ্রীটি আপডেট করেছেন তা সংরক্ষণাগারে নেই এবং যুক্ত করার প্রয়োজন রয়েছে। এই চিন্তাভাবনার উপায়টিও ব্যাখ্যা করে যে গিটটি খালি ফোল্ডারগুলি কেন ট্র্যাক করে না: যদিও তারা প্রযুক্তিগতভাবে ফাইল হয় তবে ট্র্যাক করার মতো কোনও সামগ্রী নেই।
গ্যারেথ

7
সামগ্রী রয়েছে, দ্বন্দ্ব দেখা দেয় কারণ 2 টি সংস্করণের সামগ্রী রয়েছে। সুতরাং "গিট অ্যাড" সঠিক শোনাচ্ছে না। এবং এটি কাজ করে না (গিট অ্যাড, গিট কমিট) যদি আপনি কেবল দ্বন্দ্ব সমাধানের পরে একটি ফাইল প্রতিশ্রুতিবদ্ধ করতে চান ("মারাত্মক:
একীকরণের

1
হ্যাঁ, প্রযুক্তিগতভাবে, এটি যা জিজ্ঞাসা করেছে এমন প্রশ্নের উত্তর দেয়, তবে আমার মতে দুঃখিত, এটি কোনও ব্যবহারযোগ্য উত্তর নয়। কি বিন্দু এক শাখা অন্য হিসাবে একই তৈরীর? অবশ্যই একীভূত হওয়ার দ্বন্দ্ব থাকবে ..
থুফির

5
থুল্ফির: কে এক শাখাকে অন্যরকম করে তুলতে কিছু বলেছিল? "একটি শাখাকে অন্যটির মতো করে না রেখে" আপনার একত্রীকরণের প্রয়োজন আছে এমন বিভিন্ন পরিস্থিতিতে রয়েছে। একটি হ'ল আপনি যখন একটি উন্নয়ন শাখা তৈরি করেন এবং এর পরিবর্তনগুলি মাস্টার শাখায় অন্তর্ভুক্ত করতে চান; এর পরে, উন্নয়ন শাখা মুছতে পারে। আর একটি হ'ল আপনি যখন নিজের বিকাশ শাখাটি পুনরায় চালু করতে চান, তখন মাস্টারটিতে চূড়ান্তভাবে চূড়ান্ত একত্রীকরণের জন্য।
টিমু লেইস্তি

4
@ জাস্টিনগ্র্যান্ট সূচকে git addফাইলগুলি পর্যায়ক্রমে; এটি ভান্ডারে কিছু যুক্ত করে নাgit commitসংগ্রহস্থলগুলিতে জিনিস যুক্ত করে। এই ব্যবহারটি মার্জগুলির জন্য অর্থবোধ করে - মার্জটি স্বয়ংক্রিয়ভাবে একত্রিত হতে পারে এমন সমস্ত পরিবর্তনের স্বয়ংক্রিয়ভাবে পর্যায়ক্রমে; বাকী পরিবর্তনগুলিকে একীভূত করা এবং আপনার কাজ শেষ হয়ে গেলে সূচিতে এগুলি যুক্ত করা আপনার দায়িত্ব।
মার্ক ই। হাজেস

105

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

# Common base version of the file.
git show :1:some_file.cpp

# 'Ours' version of the file.
git show :2:some_file.cpp

# 'Theirs' version of the file.
git show :3:some_file.cpp

"গিট চেকআউট-এম" বিকল্পের জন্য "-m" বিকল্পটিও দেখুন - এটি আপনাকে আপনার কর্মক্ষেত্রের মধ্যে আবার বিভিন্ন
উড়ালগুলি

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

99

একই সময়ে কোনও ফাইলে পরিবর্তন আনলে সংঘাতগুলি সংঘটিত হয়। এটি কীভাবে সমাধান করা যায় তা এখানে।

git CLI

আপনি দ্বন্দ্বপূর্ণ অবস্থায় পড়লে কী করবেন তা এখানে সরল পদক্ষেপ রয়েছে:

  1. এতে বিবাদযুক্ত ফাইলগুলির তালিকাটি নোট করুন: git status( Unmerged pathsবিভাগের অধীনে )।
  2. নিম্নলিখিত ফাইলগুলির মধ্যে একটির মাধ্যমে প্রতিটি ফাইলের জন্য পৃথক বিবাদগুলি সমাধান করুন:

    • বিবাদগুলি সমাধান করতে জিইউআই ব্যবহার করুন: git mergetool(সবচেয়ে সহজ উপায়)।

    • স্বীকার করতে দূরবর্তী / অন্যান্য সংস্করণ, ব্যবহার: git checkout --theirs path/file। এটি সেই ফাইলের জন্য আপনি যে স্থানীয় পরিবর্তনগুলি করেছেন তা প্রত্যাখ্যান করবে।

    • স্থানীয় / আমাদের সংস্করণ গ্রহণ করতে, ব্যবহার করুন: git checkout --ours path/file

      তবে আপনাকে সতর্ক হতে হবে, কারণ দূরবর্তী পরিবর্তনগুলি যে কারণে কোনও কারণে দ্বন্দ্ব হয়েছিল।

      সম্পর্কিত: গিটের "আমাদের" এবং "তাদের" এর সঠিক অর্থ কী?

    • দ্বন্দ্বযুক্ত ফাইলগুলি ম্যানুয়ালি সম্পাদনা করুন এবং তারপরে <<<<</ >>>>>নীচের থেকে সংস্করণটি বেছে নিন / তার মধ্যে কোড ব্লকের সন্ধান করুন =====। দেখুন: বিবাদগুলি কীভাবে উপস্থাপন করা হয়

    • পাথ এবং ফাইলের নাম দ্বন্দ্বগুলি git add/ দ্বারা সমাধান করা যেতে পারে git rm

  3. অবশেষে, পর্যালোচনা ফাইলের জন্য ব্যবহার কমিট প্রস্তুত: git status

    আপনি যদি এখনও অধীনে কোন ফাইল থাকে, তাহলে Unmerged paths, এবং আপনি ম্যানুয়ালি দ্বন্দ্ব সমাধান হয়নি, তবে গীত জানি তুমি দ্বারা মীমাংসিত যাক: git add path/file

  4. যদি সমস্ত বিবাদগুলি সফলভাবে সমাধান হয়ে যায় তবে এর দ্বারা পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ: git commit -aএবং যথারীতি দূরবর্তী স্থানে চাপ দিন।

আরও দেখুন: গিটহাবের কমান্ড লাইন থেকে মার্জ সংঘাতের সমাধান করা

ব্যবহারিক টিউটোরিয়ালের জন্য, দেখুন: পরিস্থিতি 5 - কাটাকোদা দ্বারা সংশোধন মার্জ সংঘাতগুলি

DiffMerge

আমি ডিফমার্জটি সফলভাবে ব্যবহার করেছি যা উইন্ডোজ, ম্যাকোস এবং লিনাক্স / ইউনিক্সে দৃশ্যমানভাবে তুলনা করতে এবং ফাইলগুলিকে একীভূত করতে পারে।

এটি গ্রাফিক্যভাবে 3 টি ফাইলের মধ্যে পরিবর্তনগুলি দেখাতে পারে এবং এটি স্বয়ংক্রিয়ভাবে মার্জিং (যখন এটি করা নিরাপদ থাকে) এবং ফলস্বরূপ ফাইলটি সম্পাদনা করার উপর সম্পূর্ণ নিয়ন্ত্রণকে অনুমতি দেয়।

DiffMerge

চিত্র উত্স: ডিফফর্ম (লিনাক্সের স্ক্রিনশট)

কেবল এটি ডাউনলোড করুন এবং রেপো হিসাবে চালনা করুন:

git mergetool -t diffmerge .

ম্যাক অপারেটিং সিস্টেম

ম্যাকোজে আপনি এর মাধ্যমে ইনস্টল করতে পারেন:

brew install caskroom/cask/brew-cask
brew cask install diffmerge

এবং সম্ভবত (যদি সরবরাহ না করা থাকে) আপনার নিম্নলিখিত রাস্তায় আপনার অতিরিক্ত পাঠানো দরকার (যেমন /usr/bin):

#!/bin/sh
DIFFMERGE_PATH=/Applications/DiffMerge.app
DIFFMERGE_EXE=${DIFFMERGE_PATH}/Contents/MacOS/DiffMerge
exec ${DIFFMERGE_EXE} --nosplash "$@"

তারপরে আপনি নিম্নলিখিত কীবোর্ড শর্টকাটগুলি ব্যবহার করতে পারেন:

  • - Alt- Up/ Downপূর্ববর্তী / পরবর্তী পরিবর্তনগুলিতে ঝাঁপ দাও।
  • - Alt- Left/ Rightবাম বা ডান থেকে পরিবর্তন গ্রহণ করতে

বিকল্পভাবে আপনি ওপেনডিফ (এক্সকোড সরঞ্জামগুলির অংশ) ব্যবহার করতে পারেন যা আপনাকে দুটি ফাইল বা ডিরেক্টরি একত্রিত করে তৃতীয় ফাইল বা ডিরেক্টরি তৈরি করতে দেয়।


79

যদি আপনি ঘন ঘন ছোট্ট কমিট করেন তবে তার সাথে কমিটের মন্তব্যগুলি দেখে শুরু করুন git log --merge। তারপরে git diffআপনাকে দ্বন্দ্ব দেখাবে।

কয়েকটি লাইনের চেয়ে বেশি জড়িত বিরোধগুলির জন্য, বাহ্যিক জিইউআই সরঞ্জামে কী চলছে তা দেখা সহজ। আমি আফেন্ডিফ পছন্দ করি - গিটটি বাক্সের বাইরে ভিমডিফ, জিভিমডিফ, কেডিআইফ 3, টিকিডিফ, মেল্ড, এক্সএক্সডিডিফ সমর্থন করে এবং আপনি অন্যগুলি ইনস্টল করতে পারেন: git config merge.tool "your.tool"আপনার নির্বাচিত সরঞ্জামটি সেট করবে এবং তারপরে git mergetoolব্যর্থ একীভূত হওয়ার পরে আপনাকে প্রসঙ্গের ভিন্নতা দেখাবে।

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


8
"গিট অ্যাড" ব্যবহার করা এখানে আসল কৌশল। আপনি এমনকি প্রতিশ্রুতিবদ্ধ নাও করতে পারেন (সম্ভবত আপনি স্ট্যাশ করতে চান), তবে মার্জটি সম্পূর্ণ করতে আপনাকে "গিট অ্যাড" করতে হবে। আমি মনে করি মার্জারুল আপনার জন্য অ্যাড করে (যদিও এটি ম্যানপেজে নেই) তবে আপনি যদি ম্যানুয়ালি মেশিনটি করেন তবে এটি সম্পন্ন করার জন্য আপনাকে "গিট অ্যাড" ব্যবহার করতে হবে (এমনকি যদি আপনি প্রতিশ্রুতি না চান)।
নোবার

47

দেখা কিভাবে দ্বন্দ্ব উপস্থাপন করা হয় বা, গীত এ, git mergeডকুমেন্টেশন বুঝতে কি একত্রীকরণ দ্বন্দ্ব চিহ্নিতকারী হয়।

এছাড়াও দ্বন্দ্বগুলি কীভাবে সমাধান করবেন কীভাবে বিরোধগুলি সমাধান করবেন তা ব্যাখ্যা করে:

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

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

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

আপনি বেশ কয়েকটি সরঞ্জাম দিয়ে দ্বন্দ্বের মাধ্যমে কাজ করতে পারেন:

  • একটি মার্জারুল ব্যবহার করুন। git mergetoolএকটি গ্রাফিকাল মার্জটুল চালু করতে যা আপনাকে মার্জ করার মাধ্যমে কাজ করবে।

  • ভিন্নতা দেখুন। git diffউভয় HEADএবং MERGE_HEADসংস্করণ উভয় থেকে পরিবর্তন হাইলাইট, একটি ত্রি-উপায় পার্থক্য প্রদর্শিত হবে ।

  • প্রতিটি শাখা থেকে পৃথক্ দেখুন। git log --merge -p <path>প্রথম diffs দেখাবে HEADসংস্করণ এবং তারপর MERGE_HEADসংস্করণ।

  • মূল দেখুন। git show :1:filenameসাধারণ পূর্বপুরুষ git show :2:filenameদেখায়, HEADসংস্করণ git show :3:filenameদেখায় এবং MERGE_HEADসংস্করণ দেখায় ।

আপনি মার্জ সংঘাতের চিহ্নিতকারীগুলি এবং কীভাবে প্রো গিট বই বিভাগ বেসিক মার্জ সংঘাতগুলিতে সেগুলি সমাধান করবেন সে সম্পর্কেও পড়তে পারেন ।


41

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

আমার বা তাদের সংস্করণটি সম্পূর্ণরূপে স্বীকার করুন :

আমার সংস্করণ গ্রহণ করুন (স্থানীয়, আমাদের):

git checkout --ours -- <filename>
git add <filename>              # Marks conflict as resolved
git commit -m "merged bla bla"  # An "empty" commit

তাদের সংস্করণ গ্রহণ করুন (দূরবর্তী, তাদের):

git checkout --theirs -- <filename>
git add <filename>
git commit -m "merged bla bla"

আপনি যদি সব বিবাদী ফাইল চালাতে চান তবে:

git merge --strategy-option ours

অথবা

git merge --strategy-option theirs

সমস্ত পরিবর্তন পর্যালোচনা করুন এবং স্বতন্ত্রভাবে সেগুলি গ্রহণ করুন

  1. git mergetool
  2. পরিবর্তনগুলি পর্যালোচনা করুন এবং তাদের প্রত্যেকটির জন্য কোনও সংস্করণ গ্রহণ করুন।
  3. git add <filename>
  4. git commit -m "merged bla bla"

ডিফল্ট কমান্ড লাইনেmergetool কাজ করে । কমান্ড লাইন মার্জেটুল কীভাবে ব্যবহার করবেন তা পৃথক প্রশ্ন হওয়া উচিত।

আপনি এর জন্য ভিজ্যুয়াল সরঞ্জামও ইনস্টল করতে পারেন , যেমন meldএবং চালান

git mergetool -t meld

এটি স্থানীয় সংস্করণ (আমাদের), "বেস" বা "মার্জড" সংস্করণ (একীভূত হওয়ার বর্তমান ফলাফল) এবং দূরবর্তী সংস্করণ (তাদের) খুলবে। মার্জড সংস্করণটি শেষ হয়ে গেলে সংরক্ষণ করুন, git mergetool -t meld"কোনও ফাইল মার্জ করার দরকার নেই" না হওয়া পর্যন্ত আবার চালান , তারপরে পদক্ষেপ 3 এবং 4 এ যান।


এই আদেশটি: গিট চেকআউট - তাদের - <ফাইল নাম> সমস্ত ফাইলই কেবল তাদের জন্য পরিবর্তিত হয়েছে, কেবল <ফাইল ফাইল> নয়
দোনাতো

আসলে আমি ভুল ছিলাম। এটি কেবল নির্দিষ্ট ফাইল আপডেট করে।
ডোনাটো

40

জন্য এ গিয়ে Emacs যা আধা ম্যানুয়ালি একত্রীকরণ দ্বন্দ্ব সমাধান করতে চান ব্যবহারকারী:

git diff --name-status --diff-filter=U

দ্বন্দ্বের সমাধানের প্রয়োজন এমন সমস্ত ফাইল দেখায়।

এই ফাইলগুলির একটি একটি করে বা সমস্ত একবারে খুলুন:

emacs $(git diff --name-only --diff-filter=U)

ইমাক্সে সম্পাদনা প্রয়োজন বাফার দেখার সময়, টাইপ করুন

ALT+x vc-resolve-conflicts

এটি তিনটি বাফার খুলবে (আমার, তাদের এবং আউটপুট বাফার)। 'এন' (পরবর্তী অঞ্চল), 'পি' (পূর্ববর্তী অঞ্চল) টিপুন নেভিগেট করুন। আউটপুট বাফারে খনি বা তার অঞ্চলটি অনুলিপি করতে যথাক্রমে 'a' এবং 'b' চাপুন। এবং / অথবা সরাসরি আউটপুট বাফার সম্পাদনা করুন।

শেষ হয়ে গেলে: 'কি' টিপুন। ইমাকস আপনাকে জিজ্ঞাসা করে আপনি এই বাফারটি সংরক্ষণ করতে চান: হ্যাঁ। একটি বাফার সমাপ্তির পরে এটি টার্মিনাল থেকে চালিয়ে সমাধান হিসাবে সমাধান করুন:

git add FILENAME

সমস্ত বাফার টাইপ দিয়ে শেষ হলে

git commit

মার্জ শেষ করতে।


33

বোনাস:

উপরের উত্তরগুলিতে টান / আনার / একীভূত হওয়ার কথা বলতে গিয়ে আমি একটি আকর্ষণীয় এবং উত্পাদনশীল কৌশল ভাগ করতে চাই,

git pull --rebase

এই উপরের কমান্ডটি আমার গিট লাইফের সবচেয়ে দরকারী কমান্ড যা অনেক সময় সাশ্রয় করে।

রিমোট সার্ভারে আপনার নতুন প্রতিশ্রুতিবদ্ধ পরিবর্তনটি চাপ দেওয়ার আগে, git pull --rebaseবরং git pullম্যানুয়াল চেষ্টা করুনmerge এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষতম রিমোট সার্ভার পরিবর্তনগুলি (একটি আনয়ন + মার্জ সহ) সিঙ্ক করবে এবং গিট লগে আপনার স্থানীয় সর্বশেষ প্রতিশ্রুতি শীর্ষে রাখবে। ম্যানুয়াল টান / মার্জ সম্পর্কে চিন্তা করার দরকার নেই।

বিরোধের ক্ষেত্রে কেবল ব্যবহার করুন

git mergetool
git add conflict_file
git rebase --continue

এখানে বিশদটি সন্ধান করুন: http://gitolite.com/git-pull--rebase


32

সহজভাবে, আপনি যদি ভালভাবে জানেন যে কোনও ভাণ্ডারগুলির মধ্যে পরিবর্তনগুলি গুরুত্বপূর্ণ নয় এবং অন্যগুলির পক্ষে সমস্ত পরিবর্তন সমাধান করতে চান তবে ব্যবহার করুন:

git checkout . --ours

আপনার সংগ্রহস্থলের পক্ষে পরিবর্তনগুলি সমাধান করতে বা

git checkout . --theirs

অন্য বা প্রধান সংগ্রহস্থলের পক্ষে পরিবর্তনগুলি সমাধান করতে ।

অন্যথায় আপনাকে একের পর এক ফাইলের মাধ্যমে পদক্ষেপ নিতে জিইউআই একীকরণ সরঞ্জামটি ব্যবহার করতে হবে, মার্জ টুলটি বলুন p4mergeবা আপনি ইতিমধ্যে ইনস্টল করেছেন এমন কারও নাম লিখুন

git mergetool -t p4merge

এবং একটি ফাইল শেষ করার পরে, আপনাকে সংরক্ষণ করতে হবে এবং বন্ধ করতে হবে, যাতে পরেরটিটি খুলবে।


2
গিট চেকআউট - তারাই আমার সমস্যার সমাধান করেছেন ধন্যবাদ
রমেশ চাঁদ

আপনি যদি ম্যানুয়ালি দ্বন্দ্বগুলি সমাধান করতে পছন্দ করেন ভিজ্যুয়াল স্টুডিও কোডে ফোল্ডারটি খোলার চেষ্টা করেন তবে এটি ফাইলগুলির মধ্যে দ্বন্দ্ব এবং বর্ণগুলির সাথে সংঘাতের রেখাগুলি চিহ্নিত করে প্রত্যেকের মধ্যে
মোহাম্মদ সেলিম

31

গিটে সংযুক্তির সংঘাতগুলি সংশোধন করতে দয়া করে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. গিট স্ট্যাটাস: গিট স্ট্যাটাস পরীক্ষা করুন

  2. প্যাচসেট পান: গিট আনুন (আপনার গিট কমিট থেকে ডান প্যাচ চেকআউট করুন)

  3. একটি স্থানীয় শাখা চেকআউট করুন (এখানে আমার উদাহরণে টেমপ 1): গিট চেকআউট-বি টেমপ্লে 1

  4. মাস্টার থেকে সাম্প্রতিক সামগ্রীগুলি টানুন: গিট টান --rebase মূল মাস্টার

  5. মার্জেটুল শুরু করুন এবং দ্বন্দ্বগুলি পরীক্ষা করুন এবং সেগুলি ঠিক করুন ... এবং আপনার বর্তমান শাখার সাথে দূরবর্তী শাখায় পরিবর্তনগুলি পরীক্ষা করুন: গিট মার্জেটুল

  6. আবার স্থিতি পরীক্ষা করুন: গিট স্ট্যাটাস

  7. মার্জেটুল দ্বারা স্থানীয়ভাবে তৈরি অযাচিত ফাইলগুলি মুছুন, সাধারণত মার্জেটুল * .orig এক্সটেনশান দিয়ে অতিরিক্ত ফাইল তৈরি করে। দয়া করে সেই ফাইলটিকে মুছুন কারণ এটি কেবলমাত্র সদৃশ এবং স্থানীয়ভাবে পরিবর্তনগুলি ঠিক করুন এবং আপনার ফাইলগুলির সঠিক সংস্করণ যুক্ত করুন। গিট যোগ করুন # আপনার_চেনজড_রেক্ট_ফাইলস

  8. আবার স্থিতি পরীক্ষা করুন: গিট স্ট্যাটাস

  9. একই কমিট আইডিতে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ (এটি একটি নতুন পৃথক প্যাচ সেট এড়ায় ): গিট কমিট --amend

  10. মাস্টার শাখায় পুশ করুন: গিট পুশ (আপনার গিট ভাণ্ডারে)


28

3 টি পদক্ষেপ রয়েছে:

  1. কমান্ড দ্বারা কোন ফাইলগুলি দ্বন্দ্ব সৃষ্টি করে তা সন্ধান করুন

    git status
    
  2. ফাইলগুলি পরীক্ষা করুন, যাতে আপনি দ্বন্দ্বগুলি এর মতো চিহ্নিত করেছেন

    <<<<<<<<head
    blablabla
    
  3. আপনি যেভাবে চান এটি এটিকে পরিবর্তন করুন, তারপরে আদেশগুলি দিয়ে প্রতিশ্রুতিবদ্ধ করুন

    git add solved_conflicts_files
    git commit -m 'merge msg'
    

আমার জন্য কাজ! ধন্যবাদ!
নুওয়ান জয়াবর্ধনে

পুনর্বাসনের সময় এটি করা হলে আপনাকে অবশ্যই মনোযোগ দিতে হবে। আপনি ব্যবহার করা উচিত Git রি-বেসের ফলে --continue পরিবর্তে Git কমিট
স্যামুয়েল Dauzon

27

অন্যদের বিবিধ হিসাবে আপনি একাধিক উপায়ে মার্জ সংঘাতগুলি ঠিক করতে পারেন fix

আমি মনে করি আসল কীটি স্থানীয় এবং দূরবর্তী সংগ্রহস্থলের সাথে কীভাবে পরিবর্তনগুলি প্রবাহিত হবে তা জেনে। এর মূল বিষয় হ'ল ট্র্যাকিং শাখাগুলি understanding আমি খুঁজে পেয়েছি যে আমি ট্র্যাকিং শাখাকে আমার স্থানীয়, আসল ফাইল ডিরেক্টরি এবং দূরবর্তী হিসাবে উত্স হিসাবে সংজ্ঞায়িত করা 'মাঝখানে হারিয়ে যাওয়া টুকরা' হিসাবে মনে করি।

এড়াতে সহায়তা করার জন্য আমি ব্যক্তিগতভাবে 2 টির অভ্যাসে চলে এসেছি।

পরিবর্তে:

git add .
git commit -m"some msg"

যার দুটি ত্রুটি রয়েছে -

ক) সমস্ত নতুন / পরিবর্তিত ফাইল যুক্ত হয়ে যায় এবং এতে কিছু অযাচিত পরিবর্তন অন্তর্ভুক্ত থাকতে পারে।
খ) আপনাকে প্রথমে ফাইল তালিকা পর্যালোচনা করতে হবে না।

সুতরাং পরিবর্তে আমি কি:

git add file,file2,file3...
git commit # Then type the files in the editor and save-quit.

এই পদ্ধতিতে আপনি কোন ফাইল যুক্ত হবে সে সম্পর্কে আপনি আরও ইচ্ছাকৃত এবং আপনি তালিকাটি পর্যালোচনা করতে এবং বার্তার জন্য সম্পাদক ব্যবহার করার সময় আরও কিছুটা চিন্তা করতে পারেন। আমি -mবিকল্পের পরিবর্তে যখন একটি পূর্ণ স্ক্রিন সম্পাদক ব্যবহার করি তখন এটি আমার প্রতিশ্রুতি বার্তাগুলিও উন্নত করে ।

[আপডেট - সময় কেটে যাওয়ার সাথে সাথে আমি আরও স্যুইচ করেছি:

git status # Make sure I know whats going on
git add .
git commit # Then use the editor

]

এছাড়াও (এবং আপনার পরিস্থিতির সাথে আরও প্রাসঙ্গিক), আমি এড়াতে চেষ্টা করি:

git pull

অথবা

git pull origin master.

কারণ টানটি মার্জকে বোঝায় এবং আপনি যদি স্থানীয়ভাবে পরিবর্তিত হয়ে থাকেন যে আপনি মার্জ করতে চান না তবে আপনি সহজেই মার্জড কোড এবং / অথবা মার্জ হওয়া উচিত নয় এমন কোডের জন্য সংঘাতের সংঘাতগুলি দিয়ে শেষ করতে পারেন।

পরিবর্তে আমি করার চেষ্টা করি

git checkout master
git fetch   
git rebase --hard origin/master # or whatever branch I want.

আপনি এটি সহায়ক খুঁজে পেতে পারেন:

গিট শাখা, কাঁটাচামচ, আনা, মার্জ, পুনরায় এবং ক্লোন, পার্থক্য কি?


আরে, আমি আপনার উত্তর বুঝতে পেরেছি। তবে যেহেতু আমি গিথুব মার্জার দ্বন্দ্বগুলিতে নতুন, তাই আমার মনে হয় এখানে কিছু অনুপস্থিত রয়েছে। আপনি যখন করবেন git checkout masterএবং আপনার সাথে স্থানীয় পরিবর্তনগুলি কী ঘটেgit fetchgit rebase --hard origin/master
সুহাইব

আমি বিশ্বাস করি আপনার কি করা উচিত সে সম্পর্কে আরও বিশদ যুক্ত করা উচিত। অন্য একটি উদাহরণ যা আমাকে বিভ্রান্ত করছে, আপনি আপনার উত্তরে উল্লেখ করেছেন: আমরা করি git add ., এটি কি আমাদের স্থানীয় পরিবর্তনগুলি সংরক্ষণ করবে যাতে আমরা অনুসরণ করতে পারি git checkout master? না তারা দুটি ভিন্ন পরিস্থিতিতে আছে?
সুহাইব

@MichaelDurrant $ git rebase --hard origin/master b5a30cc159ba8dd error: unknown option হার্ড 'ব্যবহার: Git রি-বেসের ফলে [-i] [অপশন] [--exec <cmd কমান্ড>] [--onto <newbase>] [<মূল প্রজেক্টের>] [<শাখা>] বা: Git রি-বেসের ফলে [-i] [ বিকল্পসমূহ] [--exec <Cdd>] [--অ্যান্ট <নতুন>>] - মূল [<ব্র্যাঞ্চ>] বা: গিট রিবেস - কনটিনিউ | --abort | --স্কিপ | --edit-todo `
জুলাই

24

CoolAJ86 এর উত্তরে সমস্ত কিছুর পরিমাণ রয়েছে। যদি কোডের একই অংশে আপনার উভয় শাখায় পরিবর্তন ঘটে তবে আপনাকে একটি ম্যানুয়াল মার্জ করতে হবে। কোনও পাঠ্য সম্পাদকের দ্বন্দ্বের মধ্যে ফাইলটি খুলুন এবং আপনার নিম্নলিখিত কাঠামোটি দেখতে পাওয়া উচিত।

(Code not in Conflict)
>>>>>>>>>>>
(first alternative for conflict starts here)
Multiple code lines here
===========
(second alternative for conflict starts here)
Multiple code lines here too    
<<<<<<<<<<<
(Code not in conflict here)

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

git commit -a -m "commit message"
git push origin master

17
git log --merge -p [[--] path]

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

আমি এই ইস্যুটি সম্পর্কে কাজ করতে যা করব তা হ'ল দুটি কমান্ড লাইন এবং এক রানের মধ্যে

git log ..$MERGED_IN_BRANCH --pretty=full -p [path]

এবং অন্যটিতে

git log $MERGED_IN_BRANCH.. --pretty=full -p [path]

$MERGED_IN_BRANCHআমি যে শাখায় একত্রী হয়ে গিয়েছিলাম এবং [path]সেই ফাইলটি যা বিরোধী। এই আদেশটি সমস্ত কমিটকে প্যাচ আকারে ( ..) দুটি কমিটের মধ্যে লগ করবে । উপরের কমান্ডগুলির মতো আপনি যদি একপাশে খালি রাখেন তবে স্বয়ংক্রিয়ভাবে গিটটি ব্যবহার করা হবে HEAD(আপনি যে শাখায় এই ক্ষেত্রে মার্জ করছেন তা)।

এই দুটি শাখাগুলির ডাইভারেজ হওয়ার পরে ফাইলগুলিতে কি কমিটগুলি ঘটেছিল তা আপনাকে দেখতে দেয়। এটি সাধারণত বিরোধগুলি সমাধান করা সহজ করে তোলে।


16

ব্যবহার patience

আমি বিস্মিত হয়েছি যে আর কেউ patienceমার্জ পুনরাবৃত্ত কৌশলটি ব্যবহার করে বিরোধ নিষ্পত্তির বিষয়ে কথা বলেনি । একটি বড় মার্জ সংঘাতের জন্য, ব্যবহার করেpatience জন্য, আমার জন্য ভাল ফলাফল সরবরাহ । ধারণাটি হ'ল এটি পৃথক লাইনের চেয়ে ব্লকগুলি মেলাতে চেষ্টা করবে।

উদাহরণস্বরূপ আপনি যদি আপনার প্রোগ্রামের ইনডেন্টেশন পরিবর্তন করেন তবে ডিফল্ট গিট মার্জ কৌশলটি কখনও কখনও একক ধনুর্বন্ধকে মেলে {যা বিভিন্ন ফাংশনের অন্তর্ভুক্ত। এটি এর সাথে এড়ানো যায় patience:

git merge -s recursive -X patience other-branch

ডকুমেন্টেশন থেকে:

With this option, merge-recursive spends a little extra time to avoid 
mismerges that sometimes occur due to unimportant matching lines 
(e.g., braces from distinct functions). Use this when the branches to 
be merged have diverged wildly.

সাধারণ পূর্বপুরুষের সাথে তুলনা

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

git diff $(git merge-base <our-branch> <their-branch>) <their-branch>

সাধারণত, আপনি কেবল একটি নির্দিষ্ট ফাইলের পরিবর্তনগুলি দেখতে চান:

git diff $(git merge-base <our-branch> <their-branch>) <their-branch> <file>

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

15

12 ই ডিসেম্বর, 2016 হিসাবে, আপনি শাখাগুলি মার্জ করতে এবং github.com এ বিরোধগুলি সমাধান করতে পারেন

সুতরাং, আপনি যদি পুরানো উত্তরগুলি থেকে এখানে দেওয়া কমান্ড-লাইন বা 3 য় পক্ষের সরঞ্জামগুলি ব্যবহার করতে না চান তবে গিটহাবের নেটিভ সরঞ্জামটি সহ যান।

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

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


এটি গিথুব সম্পর্কে জিজ্ঞাসা করছে না এইভাবে আমি নীচে আমি যা খুব ঘৃণ্য উত্তর বলে দেখলাম তাতে ভোট দিয়েছি।
এমএসচুয়েট

1
@ এমসচুয়েট ঠিক আছে, প্রশ্নটি "গিটে বিবাদগুলি কীভাবে সমাধান করবেন", "গিথুবে বিরোধগুলি কীভাবে সমাধান করবেন" নয় not একটি পার্থক্য রয়েছে এবং ইতিমধ্যে অনেক লোক রয়েছেন যারা গিট এবং গিথুব একই জিনিস বলে মনে করেন, তাই যে অনুভূতিটি ভুল তা প্রচার করে যে কোনও কিছুই।
প্যাট্রিক মেভিজেক

15

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

পদক্ষেপ 1 : শাখায় যান

git checkout test

পদক্ষেপ 2 :

git pull --rebase origin master

পদক্ষেপ 3 : যদি কিছু বিবাদ হয় তবে এটি পরিবর্তন করতে এই ফাইলগুলিতে যান।

পদক্ষেপ 4 : এই পরিবর্তনগুলি যুক্ত করুন

git add #your_changes_files

পদক্ষেপ 5 :

git rebase --continue

পদক্ষেপ :: যদি এখনও বিরোধ দেখা দেয় তবে আবার ৩ য় ধাপে ফিরে যান। যদি কোনও বিরোধ না হয় তবে নিম্নলিখিতগুলি করুন:

git push origin +test

পদক্ষেপ 7 : এবং তারপরে পরীক্ষা এবং মাস্টারগুলির মধ্যে কোনও বিরোধ নেই। আপনি সরাসরি মার্জ ব্যবহার করতে পারেন।


13

বিরোধগুলি এড়াতে আমি সর্বদা নীচের পদক্ষেপগুলি অনুসরণ করি।

  • গিট চেকআউট মাস্টার (মাস্টার শাখায় আসুন)
  • গিট টান (সর্বশেষ কোড পেতে আপনার মাস্টার আপডেট করুন)
  • গিট চেকআউট-বি মাইব্র্যাঞ্চ (একটি নতুন শাখা চেকআউট করুন এবং সেই শাখায় কাজ শুরু করুন যাতে আপনার মাস্টার সর্বদা ট্রাঙ্কের শীর্ষে থাকে))
  • গিট অ্যাড এবং গিট কমিট এবং গিট পুশ (আপনার পরিবর্তনের পরে আপনার স্থানীয় শাখায়)
  • গিট চেকআউট মাস্টার (আপনার মাস্টারের কাছে ফিরে আসুন))

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


12

বিভিন্ন পরিস্থিতিতে সংঘাতগুলি সংঘটিত হতে পারে:

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

দ্বন্দ্বগুলি সমাধান করার জন্য আপনাকে একটি মার্জ সরঞ্জাম ইনস্টল করতে হবে যা গিটের সাথে সামঞ্জস্যপূর্ণ। আমি ব্যক্তিগতভাবে কেডিফ 3 ব্যবহার করি এবং আমি এটি সুন্দর এবং হ্যান্ডসেট খুঁজে পেয়েছি। আপনি এর উইন্ডোজ সংস্করণটি এখানে ডাউনলোড করতে পারেন:

https://sourceforge.net/projects/kdiff3/files/

বিটিডাব্লু যদি আপনি গিট এক্সটেনশানগুলি ইনস্টল করেন তবে কেডিফ 3 ইনস্টল করার জন্য এর সেটআপ উইজার্ডে একটি বিকল্প রয়েছে।

তারপরে কেডিফকে তার মার্জারুল হিসাবে ব্যবহার করতে সেটআপ গিট কনফিগার করুন:

$ git config --global --add merge.tool kdiff3
$ git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add mergetool.kdiff3.trustExitCode false

$ git config --global --add diff.guitool kdiff3
$ git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add difftool.kdiff3.trustExitCode false

(কেডিফ এক্সিপ ফাইলের আসল পথ দিয়ে পাথটি প্রতিস্থাপনের কথা মনে রাখবেন))

তারপরে প্রতিবার আপনি যখন মার্জ সংঘাতের মুখোমুখি হন আপনার কেবল এই আদেশটি চালানো দরকার:

$git mergetool

তারপরে এটি কেডিফ 3 খুলবে এবং প্রথমে স্বয়ংক্রিয়ভাবে মার্জ সংঘাতগুলি সমাধান করার চেষ্টা করবে। বেশিরভাগ দ্বন্দ্ব স্বতঃস্ফূর্তভাবে সমাধান করা হবে এবং আপনাকে বাকীটি নিজেই ঠিক করতে হবে।

কেডিফ 3 এর মতো দেখতে এখানে রয়েছে:

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

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

সবকিছু সফলভাবে একত্রিত হয়েছে কিনা তা পরীক্ষা করতে, কেবল আবার মার্জেটুল কমান্ডটি চালান, আপনার এই ফলাফলটি পাওয়া উচিত:

$git mergetool
No files need merging

8

এই উত্তরগুলি হ'ল আমার মতো সেই ভিআইএম ব্যবহারকারীদের জন্য একটি বিকল্প যুক্ত করা যা সম্পাদকের মধ্যে যা কিছু করা পছন্দ করে।


টি এল; ডিআর

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


পলাতক নামক ভিআইএম-এর জন্য দুর্দান্ত এই প্লাগইনটি নিয়ে এসেছিলেন টপোপ । একবার ইনস্টল হয়ে গেলে আপনি :Gstatusযে ফাইলগুলির দ্বন্দ্ব রয়েছে সেগুলি পরীক্ষা করতে চালাতে পারেন and:Gdiff গিটটি 3 উপায়ে মার্জ করে খোলার জন্য ।

একবার ত্রি-উপায়ে একত্রিত হওয়ার পরে পলাতক আপনাকে নীচের ফ্যাশনে মার্জ করা যে কোনও শাখার পরিবর্তন পেতে দেবে:

  • :diffget //2, আসল ( হেড ) শাখা থেকে পরিবর্তনগুলি পান :
  • :diffget //3, মার্জ করা শাখা থেকে পরিবর্তনগুলি পান:

আপনি একবার ফাইলটি মার্জ শেষ করার পরে, :Gwriteমার্জ করা বাফারটি টাইপ করুন । ভিমকাস্টগুলি এই পদক্ষেপগুলির বিশদটি ব্যাখ্যা করে একটি দুর্দান্ত ভিডিও প্রকাশ করেছে।


6

ভিএস কোডের জন্য গিটলেন্স

আপনি গিটলেন্স চেষ্টা করতে পারেন ভিএস জন্য মূল বৈশিষ্ট্যগুলি :

৩. সহজেই বিরোধগুলি সমাধান করুন।

আমি এই বৈশিষ্ট্যটি ইতিমধ্যে পছন্দ করেছি:

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

2. বর্তমান লাইন দোষারোপ।

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

৩.গুটার দোষ

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

4. অবস্থা বার দোষারোপ

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

এবং এখানে অনেকগুলি বৈশিষ্ট্য রয়েছে যা আপনি সেগুলি এখানে পরীক্ষা করতে পারেন ।


5

গিট ফেচ
গিট আপনার শাখা
গিট রিবেস মাস্টার চেকআউট

এই পদক্ষেপে আপনি আপনার পছন্দের আইডিই ব্যবহার করে সংঘাতের সমাধানের চেষ্টা করবেন

আপনি https://help.github.com/articles/resolving-a- व्यवस्थापन-conflict-using-the-command-line/ ফাইলের সংঘাত নিরসনে হো পরীক্ষা করতে এই লিঙ্কটি অনুসরণ করতে পারেন

গিট অ্যাড
গিট রিবেস - কনটিনিউ
গিট কমিট - এবং
গিট পুশ অরিজিন হেড: রেফ / ড্রাফ্ট / মাস্টার (খসড়ার মতো ধাক্কা)

এখন প্রতিটি জিনিসই ভাল এবং আপনি জীবাণুতে আপনার প্রতিশ্রুতি খুঁজে পাবেন

আমি আশা করি এটি এই সমস্যাটি সম্পর্কে প্রত্যেককে সহায়তা করবে।


3

আপনি যদি ইতিমধ্যে না হন তবে সম্পাদনার জন্য ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে দেখুন। এটি যা করে তা হল আপনি মার্জ করার চেষ্টা করার পরে (এবং মার্জ সংঘাতের মধ্যে অবতরণ) V

দেখানো মূল এক পরিবর্তনগুলি করেছে কি দ্বারা খুব ভাল আপনাকে সহায়তা করতে পারে এবং আপনি গ্রহণ করা উচিত incomingবা

current change(অর্থ একত্র হওয়ার আগে আসল)) ?.

এটি আমার পক্ষে সহায়তা করেছে এবং এটি আপনার পক্ষেও কাজ করতে পারে!

PS: আপনি কেবল নিজের কোড এবং ভিজ্যুয়াল স্টুডিও কোড দিয়ে গিটটি কনফিগার করলেই এটি কাজ করবে।


2

বিবাদগুলি সমাধানের একটি নিরাপদ উপায় হ'ল গিট-মধ্যস্থতা ব্যবহার করা (এখানে প্রস্তাবিত সাধারণ সমাধানগুলি যথেষ্ট ত্রুটিযুক্ত ইমো)

কীভাবে এটি ব্যবহার করবেন তার দ্রুত পরিচয়ের জন্য এই পোস্টটি দেখুন ।


2

যারা ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন তাদের জন্য (আমার ক্ষেত্রে 2015)

  1. আপনার প্রকল্পটি ভিএস-এ বন্ধ করুন বিশেষত বড় প্রকল্পগুলিতে ভিএস ইউআই ব্যবহার করে মার্জ করার সময় ঝাঁকুনির দিকে ঝুঁকে পড়ে।

  2. কমান্ড প্রম্পটে একীভূত করুন।

    গিট চেকআউট লক্ষ্য_ব্রাঞ্চ

    গিট একত্রিত করার উত্স_ ব্রাঞ্চ

  3. তারপরে ভিএসে প্রকল্পটি খুলুন এবং টিম এক্সপ্লোরার -> শাখায় যান। এখন একটি বার্তা রয়েছে যা জানিয়েছে যে মার্জটি মুলতুবি রয়েছে এবং বিরোধী ফাইলগুলি বার্তার ঠিক নীচে তালিকাভুক্ত রয়েছে।

  4. বিরোধী ফাইলটিতে ক্লিক করুন এবং আপনার কাছে মার্জ, তুলনা, উত্স নেবে, লক্ষ্য অর্জনের বিকল্প থাকবে। ভিএসে মার্জ সরঞ্জামটি ব্যবহার করা খুব সহজ।


আমি খুব বড় প্রকল্পে ভিএস কোড 2017 ব্যবহার করছি এবং প্রকল্পটি বন্ধ করার দরকার নেই। এটি এটি বেশ ভালভাবে পরিচালনা করে :)
প্রোটো ইভানজেলিওন

2

আপনি যদি আইডিই হিসাবে ইন্টিলিজ ব্যবহার করছেন তবে পিতামাতাকে আপনার শাখায় মার্জ করার চেষ্টা করুন

git checkout <localbranch>
git merge origin/<remotebranch>

এটি এর মতো সমস্ত বিবাদ দেখাবে

এ_এমবিপ্রো: পরীক্ষা আনু $ গিট মার্জ অরিজিন / অটো-মার্জিং এসসিআর / টেস্ট / জাভা / কম /...// টেস্টক্লাস.জভা কনফ্লিক্ট (সামগ্রী): এসআরসি / টেস্ট / জাভা / কম /.../ টেস্টক্লাস.জভাতে সংহত বিবাদ

এখন নোট করুন যে টেস্টক্লাস.জভা ফাইলটি ইন্টেলিজজে লাল দেখানো হয়েছে এছাড়াও গিট স্ট্যাটাসটি প্রদর্শিত হবে

Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified:   src/test/java/com/.../TestClass.java

ইন্টেলিজজে ফাইলটি খুলুন, এর সাথে বিভাগ থাকবে

  <<<<<<< HEAD
    public void testMethod() {
    }
    =======
    public void testMethod() { ...
    }
    >>>>>>> origin/<remotebranch>

যেখানে হেড আপনার স্থানীয় শাখায় পরিবর্তিত হয় এবং দূরবর্তী শাখা থেকে পরিবর্তিত হয় / হয়। আপনার প্রয়োজনীয় জিনিসগুলি এখানে রাখুন এবং আপনার প্রয়োজনীয় জিনিসগুলি সরিয়ে ফেলুন f এর পরে সাধারণ পদক্ষেপগুলি করা উচিত। এটাই

   git add TestClass.java
   git commit -m "commit message"
   git push

2

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

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