বেশিরভাগ কেসে, Git ব্রাঞ্চগুলোর মধ্যে পার্থক্য রিসolve করতে পারে এবং সেগুলো মার্জ করতে পারে। এটি কারণ ডেভেলপাররা সাধারণত ডিফারেন্ট লাইন বা ফাইলে পরিবর্তন আনন। কিছু কেস আছে যেখানে Git একটি রিপোজিটরি মার্জ করতে পারে না। এই পরিস্থিতিগুলোকে মার্জ কনফ্লিক্ট বলা হয়।
এই গাইডে, আমরা মার্জ কী, মার্জ কনফ্লিক্ট কী, এবং আপনি কীভাবে একটি git merge conflict সমাধান করবেন সে সম্পর্কে আলোচনা করব। চলুন শুরু করি!
মার্জ কনফ্লিক্ট কী?
একটি মার্জ কনফ্লিক্ট হলো যেখানে Git আপনার সাহায্য ছাড়া দুটি ব্রাঞ্চ মার্জ করতে পারে না।
মার্জ Git-এর মতো ভার্সন কন্ট্রোল সিস্টেমের একটি কর্নারস্টোন ফিচার। এগুলো ডেভেলপারদের একটি রিপোজিটরিতে মাল্টিপল আলাদা ডেভেলপমেন্ট লাইন মেইনটেইন করতে দেয়। এর মানে একজন ডেভেলপার একটি ব্রাঞ্চে বাগ ফিক্স করতে পারে অন্য ব্রাঞ্চে কাজ করার সাথে সাথে, মেইন কপি পরিবর্তন ছাড়া।
মার্জ কনফ্লিক্ট দুটি পরিস্থিতিতে উত্থান করে:
- দুই ব্রাঞ্চ একই লাইন অফ কোড পরিবর্তন করেছে।
- এক ব্রাঞ্চ একটি ফাইল রিমুভ করেছে যেটি অন্য ব্রাঞ্চে পরিবর্তন করা হয়েছে।
যখন একটি মার্জ কনফ্লিক্ট উত্থান করে, Git-এ একটি এরর প্রেজেন্ট করা হয়। এটি আপনাকে বলে যে Git ব্রাঞ্চগুলো সফলভাবে মার্জ করতে অক্ষম।
রিমুভড ফাইল কনফ্লিক্ট সমাধান কীভাবে করবেন
Git ব্রাঞ্চগুলো একে অপরের থেকে স্বতন্ত্র। এর মানে একজন ডেভেলপার একটি ব্রাঞ্চে একটি ফাইল রিমুভ করতে পারে সেটি অন্য ব্রাঞ্চকে প্রভাবিত ছাড়া।
মার্জ কনফ্লিক্ট হতে পারে যদি একটি ব্রাঞ্চে একটি ফাইলে পরিবর্তন করা হয়, এবং সেই ফাইলটি অন্য ব্রাঞ্চে রিমুভ করা হয়। এটি কারণ Git জানে না ফাইলটি ডিলিট করা উচিত কিনা অথবা পরিবর্তন করা উচিত।
৮১% পার্টিসিপেন্ট заяви করেছেন যে বুটক্যাম্পে অংশগ্রহণের পর তাদের টেক জব প্রস্পেক্টস নিয়ে তারা আরও আত্মবিশ্বাসী মনে করছেন। আজই একটি বুটক্যাম্পে ম্যাচ করুন।
গড় বুটক্যাম্প গ্র্যাজুট ক্যারিয়ার ট্রানজিশনে ছয় মাসের কম সময় ব্যয় করেছেন, বুটক্যাম্প শুরু থেকে প্রথম জব পাওয়ার পর্যায়ে।
ধরা যাক আমাদের দুটি ব্রাঞ্চ রয়েছে: dev এবং master। dev ব্রাঞ্চে, আমরা README.md ফাইল রিমুভ করেছি। master ব্রাঞ্চে, আমরা নতুন টেক্সট যোগ করেছি।
আমরা এই ব্রাঞ্চগুলো মার্জ করতে পারি git merge কমান্ড ব্যবহার করে:
git merge dev
এটি "dev" ব্রাঞ্চকে আমাদের কারেন্ট ব্রাঞ্চের ওপর মার্জ করবে, যেটি master। আমাদের কোড একটি মার্জ কনফ্লিক্ট রিটার্ন করেছে:
Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.
এই কনফ্লিক্ট সমাধান করতে, আমাদের একটি ডিসিশন নিতে হবে: আমরা কী চাই? ফাইলটি রাখব, অথবা পরিবর্তন করব? আপনি যদি ফাইলটি রাখতে চান, git add কমান্ড ব্যবহার করে সেটি রিপোজিটরিতে ফিরিয়ে যোগ করুন:
git add README.md
অন্যথায়, git rm কমান্ড ব্যবহার করে আপনার রিপোজিটরি থেকে রিমুভ করুন:
git rm README.md
rm command ফাইলটি আপনার লোকাল রিপোজিটরি থেকে ডিলিট করবে। rm কমান্ড ব্যবহার করার আগে, ডাবল চেক করুন নিশ্চিত হতে আপনি ফাইলটি রিমুভ করতে চান।
একবার আপনি কনফ্লিক্টেড ফাইলগুলোর সাথে কী করতে চান সেটি নির্ধারণ করলে, আপনি আপনার পরিবর্তন সহ একটি কমিট তৈরি করতে পারেন এবং ব্রাঞ্চটি মার্জ করতে পারেন:
git add README.md git commit -m "feat: Add README.md to repository" git merge dev
git add কমান্ড আমাদের পরিবর্তন স্টেজ করে। git commit কমান্ড একটি নতুন কমিট তৈরি করে। git merge কমান্ড আমাদের dev এবং master ব্রাঞ্চ মার্জ করে। আমাদের ব্রাঞ্চগুলো এখন মার্জ করতে পারে কারণ আমরা মার্জ কনফ্লিক্ট সমাধান করেছি।
ফাইল চেঞ্জ কনফ্লিক্ট সমাধান কীভাবে করবেন
ডেভেলপাররা কখনও কখনও একই ফাইলে পরিবর্তন আনেন দুটি আলাদা ব্রাঞ্চে। Git-এর জন্য distinguer করা невозможIBLE যে কোন পরিবর্তন রাখা উচিত যখন দুটি ব্রাঞ্চ মার্জ করা হচ্ছে।
এই কেসে, একটি মার্জ কনফ্লিক্ট উত্থান করে। ধরা যাক আমাদের একটি রিপোজিটরি আছে দুটি ব্রাঞ্চসহ: master এবং dev। আমরা README.md ফাইলে উভয় ব্রাঞ্চেই পরিবর্তন আনেছি। এতে একটি মার্জ কনফ্লিক্ট হয়েছে:
Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.
প্রথম ধাপ হলো মার্জ কনফ্লিক্টের রুট কজ идентиফাই করা। আপনি এটি করতে পারেন git status কমান্ড ব্যবহার করে:
On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: README.md
এই মেসেজ থেকে আমরা দেখতে পাচ্ছি যে ফাইল README.md উভয় ব্রাঞ্চে মডিফাইড। এখন, আমাদের আমাদের মার্জ কনফ্লিক্ট সমাধান করতে হবে। চলুন আমাদের README.md ফাইলটি একটি টেক্স्ट এডিটর দিয়ে খুলি:
This is a README.md file. This is in a repository called merge-conflicts. <<<<<<< HEAD This file is on the main branch. ======= This file is on the dev branch. >>>>>>> dev
Git ফাইলটি এডিট করেছে আমাদের বলে একটি মার্জ কনফ্লিক্ট আছে এবং কনফ্লিক্ট মার্কার যোগ করেছে। Git less than, greater than, এবং equals সাইন ক্যারেক্টার ব্যবহার করে মার্জ কনফ্লিক্ট এক্সপ্রেস করতে।
Less than signs (<) রিপ্রেজেন্ট করে কারেন্ট ব্রাঞ্চে করা পরিবর্তনগুলো। Greater than signs (>) আপনাকে বলে যে ব্রাঞ্চে কী পরিবর্তন হয়েছে যেটি আপনি আপনার কারেন্ট ব্রাঞ্চে মার্জ করার চেষ্টা করলেন। Equals signs (=) পার্থক্যগুলো আলাদা করে।
এই কেসে:
- “This file is on the main branch.” আমাদের master ব্রাঞ্চে (অথবা HEAD)।
- “This file is on the dev branch.” আমাদের dev ব্রাঞ্চে।
এই মার্জ টুল কনফ্লিক্ট সমাধান করতে, আপনাকে শুধু আপনি যা চান না সেটি রিমুভ করতে হবে। ধরা যাক আমরা চাই আমাদের কোড বলুক: “This file is on a branch.” আমরা এই অमेंডমেন্ট এভাবে করতে পারি:
This is a README.md file. This is in a repository called merge-conflicts. This file is on a branch.
এই পরিবর্তনগুলো করার পর, আমরা ফাইনাল মার্জ করার জন্য প্রস্তুত। চলুন আমাদের পরিবর্তনগুলো স্টেজ করি, কমিট করি রিপোজিটরিতে, এবং আমাদের dev এবং master ব্রাঞ্চ মার্জ করি:
git add . git commit -m "feat: Resolve merge conflict." git merge dev
এখন যেহেতু আমরা আমাদের মার্জ কনফ্লিক্ট সমাধান করেছি, আমাদের কোড সফলভাবে মার্জ হয়।
উপসংহার
মার্জ কনফ্লিক্ট উত্থান করে যখন আপনি একই লাইন অফ টেক্সট পরিবর্তন করেন দুটি ব্রাঞ্চে অথবা যেখানে আপনি একটি ফাইল পরিবর্তন করেন এক ব্রাঞ্চে এবং সেই ফাইলটি রিমুভ করেন অন্য ব্রাঞ্চে।
এই গাইডে, আমরা আলোচনা করেছি উভয় কেসে মার্জ কনফ্লিক্ট কীভাবে সমাধান করতে হয়। এখন আপনি মার্জ কনফ্লিক্ট ট্যাকল করার জন্য প্রস্তুত একজন Git এক্সপার্টের মতো।