git checkout
--ours
আপনার স্থানীয়ভাবে থাকা ফাইলটির সংস্করণটি পরীক্ষা করার বিকল্প রয়েছে (এর বিপরীতে --theirs
, আপনি যে সংস্করণটি টানছেন)। আপনি পাস করতে পারেন .
থেকে git checkout
গাছ সবকিছু চেক আউট করতে এটা বলতে। তারপরে আপনার দ্বন্দ্বগুলি সমাধান হিসাবে চিহ্নিত করা দরকার, যা আপনি এটি করতে পারেন git add
এবং আপনার কাজটি একবার হয়ে গেলে:
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
কমান্ডের .
মধ্যে নোট করুন git checkout
। এটি খুব গুরুত্বপূর্ণ, এবং মিস করা সহজ। git checkout
দুটি মোড আছে; একটিতে এটি শাখাগুলি স্যুইচ করে, এবং একটিতে এটি সূচী থেকে ফাইলগুলি কার্যকরী অনুলিপিতে পরীক্ষা করে sometimes এটি যেভাবে আলাদা করে তা হ'ল আপনি কোনও ফাইল নাম পাস করেছেন কিনা; আপনি যদি কোনও ফাইলনেমে পাস না করে থাকেন তবে এটি শাখাগুলি স্যুইচ করার চেষ্টা করে (যদিও আপনি যদি একটি শাখায় পাস না করেন তবে এটি কেবল বর্তমান শাখাটি আবার পরীক্ষা করে দেখার চেষ্টা করবে), তবে পরিবর্তিত ফাইল থাকলে এটি তা করতে অস্বীকার করে যে কার্যকর হবে। সুতরাং, আপনি যদি এমন আচরণ চান যা বিদ্যমান ফাইলগুলিকে ওভাররাইট করবে, .
দ্বিতীয় আচরণটি পেতে আপনাকে প্রবেশ করতে হবে বা একটি ফাইল নাম প্রয়োজন git checkout
।
কোনও ফাইলনাম পাস করার সময় এটি অফসেট করা --
যেমন একটি ভাল অভ্যাস git checkout --ours -- <filename>
। যদি আপনি এটি না করেন এবং ফাইলের নামটি কোনও শাখা বা ট্যাগের নামের সাথে মিলে যায় তবে গিট মনে করবে যে আপনি সেই ফাইলটির নাম পরীক্ষা করে দেখার পরিবর্তে সেই সংশোধনটি পরীক্ষা করতে চান, এবং সুতরাং checkout
কমান্ডের প্রথম ফর্মটি ব্যবহার করুন ।
গিটে কীভাবে দ্বন্দ্ব ও সংশ্লেষের কাজ হবে সে সম্পর্কে আমি কিছুটা প্রসারিত করব । আপনি যখন অন্য কারও কোডে মার্জ হয়ে যান (এটি একটি টানার সময়ও ঘটে; একটি টান মূলত একটি মার্চ পরে মেশানো হয়) তখন খুব কম সম্ভাব্য পরিস্থিতি থাকে।
সবচেয়ে সহজ হ'ল আপনি একই সংশোধনীতে রয়েছেন। এই ক্ষেত্রে, আপনি "ইতিমধ্যে আপ টু ডেট", এবং কিছুই ঘটে না।
আরেকটি সম্ভাবনা হ'ল তাদের পুনর্বিবেচনাটি কেবল আপনারই বংশধর, এক্ষেত্রে আপনার ডিফল্টরূপে "ফাস্ট-ফরোয়ার্ড মার্জ" থাকবে, যেখানে HEAD
কোনও মার্জ হওয়া ঘটবে না বলে আপনার প্রতিশ্রুতিতে সবেমাত্র আপডেট করা হবে (আপনি যদি এটি অক্ষম করতে পারেন তবে সত্যিই ব্যবহার করে একটি মার্জ রেকর্ড করতে চান --no-ff
)।
তারপরে আপনি এমন পরিস্থিতিতে পড়ুন যেখানে আপনাকে আসলে দুটি সংশোধনী মার্জ করতে হবে। এই ক্ষেত্রে, দুটি সম্ভাব্য ফলাফল রয়েছে। একটি হ'ল মার্জ পরিষ্কারভাবে ঘটে; সমস্ত পরিবর্তনগুলি বিভিন্ন ফাইলে বা একই ফাইলে রয়েছে তবে উভয় পরিবর্তনের সেট কোনও সমস্যা ছাড়াই প্রয়োগ করা যেতে পারে। ডিফল্টরূপে, যখন একটি পরিষ্কার মার্জ ঘটে তখন এটি স্বয়ংক্রিয়ভাবে প্রতিশ্রুতিবদ্ধ হয়, যদিও আপনি --no-commit
যদি আগেই এটি সম্পাদনা করতে চান তবে এটি অক্ষম করতে পারেন (উদাহরণস্বরূপ, আপনি যদি ফাংশনটির নাম পরিবর্তন foo
করেন bar
, এবং অন্য কেউ কল করে যে নতুন কোড যুক্ত করে foo
, এটি পরিষ্কারভাবে মার্জ হবে) , তবে একটি ভাঙা গাছ উত্পাদন করুন, যাতে কোনও ভাঙ্গা কমিটমেন্ট এড়াতে আপনি মার্জ কমিটের অংশ হিসাবে এটি পরিষ্কার করতে চাইতে পারেন)।
চূড়ান্ত সম্ভাবনাটি হ'ল সত্যিকারের একত্রীকরণ এবং এখানে দ্বন্দ্ব রয়েছে। এই ক্ষেত্রে, গীত যতটা একত্রীকরণ হিসাবে এটা করতে পারেন কি করতে হবে, এবং দ্বন্দ্ব চিহ্নিতকারী (ফাইল উত্পাদন <<<<<<<
, =======
এবং >>>>>>>
আপনার কাজের কপিতে)। সূচীতে ("স্টেজিং এরিয়া" নামেও পরিচিত; ফাইলগুলি git add
প্রতিশ্রুতি দেওয়ার আগে ফাইলগুলি সংরক্ষণ করা হয় এমন জায়গায় ) আপনার দ্বন্দ্ব সহ প্রতিটি ফাইলের 3 টি সংস্করণ থাকবে; আপনি যে দুটি শাখাকে মার্জ করছেন তা পূর্বপুরুষের থেকে ফাইলের মূল সংস্করণ, HEAD
( সংযুক্তির আপনার পাশের) সংস্করণ এবং দূরবর্তী শাখার সংস্করণ রয়েছে।
দ্বন্দ্ব সমাধানের জন্য, আপনি হয় আপনার কার্যকরী অনুলিপিতে থাকা ফাইলটি সম্পাদন করতে পারেন, বিরোধ বিরোধকারী চিহ্নিতকারীদের সরিয়ে এবং কোড ঠিক করতে যাতে এটি কাজ করে। অথবা, আপনি এক বা একত্রীকরণ অন্যান্য পক্ষই ব্যবহার থেকে সংস্করণ চেক আউট করতে পারেন git checkout --ours
বা git checkout --theirs
। একবার আপনি যে ফাইলটি চান তার মধ্যে ফাইলটি রাখলে আপনি ইঙ্গিত করেন যে আপনি ফাইলটি মার্জ হয়ে গিয়েছেন এবং এটি ব্যবহারে প্রতিশ্রুতিবদ্ধ হতে প্রস্তুত git add
, এবং তারপরে আপনি এই সংশ্লেষকে কমিট করতে পারেন git commit
।