Skip to content

Git-এ Conflict সমাধান (Resolve Conflict)

Git-এ Merge Conflict একে অপরের পরিবর্তনকে একত্রিত করতে না পারার কারণে ঘটে। যখন দুটি ব্রাঞ্চের মধ্যে একে অপরের সঙ্গে সাদৃশ্যপূর্ণ পরিবর্তন থাকে, তখন Git জানে না কোনটা ব্যবহার করতে হবে। এই অবস্থায় Git আপনাকে কনফ্লিক্ট সমাধান করতে বলে।

এখন, আসুন দেখে নিই কীভাবে Git-এ কনফ্লিক্ট সমাধান করতে হয় এবং এর সাথে সম্পর্কিত উদাহরণ।

🚨 Merge Conflict কীভাবে ঘটবে?

Merge Conflict তখন ঘটে যখন দুইটি ব্রাঞ্চ একই ফাইলের একই অংশে আলাদা আলাদা পরিবর্তন করে, এবং Git জানে না কোনটি মর্জ করতে হবে।

এটা হতে পারে:

  1. একই লাইনে পরিবর্তন – দুটি ব্রাঞ্চ একই কোড লাইনে পরিবর্তন করেছে।
  2. একটি ফাইল মুছে ফেলা এবং অন্যটি পরিবর্তন করা – একটি ব্রাঞ্চ একটি ফাইল মুছে ফেললে, অন্যটি সেই ফাইলের মধ্যে কিছু পরিবর্তন করে।
  3. একই ফাইলের নাম পরিবর্তন – এক ব্রাঞ্চে ফাইলের নাম পরিবর্তন করা হয়, আর অন্য ব্রাঞ্চে ফাইলটি পরিবর্তিত হয়।

📝 Conflict সমাধানের ধাপ:

  1. কনফ্লিক্ট চেক করুন:

    প্রথমেই, কনফ্লিক্ট ঘটেছে কি না, তা চেক করতে git status কমান্ড ব্যবহার করুন। এটি আপনাকে কনফ্লিক্টেড ফাইলগুলো দেখাবে।

bash
   git status
   git status

এর আউটপুট যেমন হতে পারে:

bash
both modified:   app.js
both modified:   app.js

এখানে app.js ফাইলটি কনফ্লিক্টে রয়েছে। এটি একটি "both modified" কনফ্লিক্ট, যা মানে হচ্ছে দুইটি ব্রাঞ্চ একই ফাইলে পরিবর্তন করেছে।

  1. কনফ্লিক্টেড ফাইল খুলুন:

    কনফ্লিক্টেড ফাইলটি খুললে আপনি কনফ্লিক্টের জন্য Git দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত মার্কার দেখতে পাবেন:

    javascript
    <<<<<<< HEAD
    const greeting = "Hello, World!";
    =======
    const greeting = "Hi, World!";
    >>>>>>> feature/add-feature
    <<<<<<< HEAD
    const greeting = "Hello, World!";
    =======
    const greeting = "Hi, World!";
    >>>>>>> feature/add-feature
    • <<<<<<< HEAD: বর্তমান ব্রাঞ্চের কোড।
    • =======: পরিবর্তনগুলোর মধ্যে পার্থক্য।
    • >>>>>>> feature/add-feature: মর্জ করার ব্রাঞ্চের কোড।
  2. কনফ্লিক্ট সমাধান করুন:

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

    উদাহরণস্বরূপ, যদি আপনি দুটো পরিবর্তন মিশিয়ে একটি নতুন সংস্করণ তৈরি করতে চান:

    javascript
    const greeting = "Hello and Hi, World!";
    const greeting = "Hello and Hi, World!";

    অথবা, আপনি একটি পরিবর্তন রাখতে পারেন, যেমন:

    javascript
    const greeting = "Hello, World!";
    const greeting = "Hello, World!";
  3. ফাইল স্টেজ করুন:

    কনফ্লিক্ট সমাধান করার পর, ফাইলটি আবার স্টেজ করুন:

    bash
    git add app.js
    git add app.js
  4. কমিট করুন:

    এরপর, মার্জ কমিট করতে হবে:

    bash
    git commit
    git commit

    Git সাধারণত একটি মার্জ কমিট মেসেজ তৈরি করবে, তবে আপনি এটি কাস্টমাইজও করতে পারেন।

🔧 Conflict সমাধান করার উদাহরণ:

1. কনফ্লিক্ট - এক লাইনে দুটি ভিন্ন পরিবর্তন:

ধরা যাক index.html ফাইলের মধ্যে:

  • Main ব্রাঞ্চ:

    html
    <h1>Welcome to My Website!</h1>
    <h1>Welcome to My Website!</h1>
  • Feature ব্রাঞ্চ:

    html
    <h1>Welcome to Our Website!</h1>
    <h1>Welcome to Our Website!</h1>

এখন আপনি যখন ব্রাঞ্চ দুটি মর্জ করবেন, তখন Git কনফ্লিক্ট তৈরি করবে। ফাইলটি এমন দেখাবে:

html
<<<<<<< HEAD
<h1>Welcome to My Website!</h1>
=======
<h1>Welcome to Our Website!</h1>
>>>>>>> feature
<<<<<<< HEAD
<h1>Welcome to My Website!</h1>
=======
<h1>Welcome to Our Website!</h1>
>>>>>>> feature

এখন আপনাকে সিদ্ধান্ত নিতে হবে:

  • আপনি কোন একটিকে রাখতে চান,
  • অথবা দুটি পরিবর্তন মিশিয়ে একটি নতুন সংস্করণ তৈরি করতে পারেন।

যেমন:

html
<h1>Welcome to My Amazing Website!</h1>
<h1>Welcome to My Amazing Website!</h1>

2. ফাইল মুছে ফেলা এবং অন্যটিতে পরিবর্তন করা:

ধরা যাক, আপনার app.css ফাইলটি দুটি ব্রাঞ্চের মধ্যে ভিন্নভাবে এডিট করা হয়েছে।

  • Main ব্রাঞ্চ: ফাইলটি মুছে ফেলেছে।
  • Feature ব্রাঞ্চ: ফাইলটিতে নতুন কিছু CSS স্টাইল যোগ করেছে।

এখন যদি আপনি feature ব্রাঞ্চটি main ব্রাঞ্চের সাথে মার্জ করেন, Git জানবে না কি করতে হবে—ফাইলটি মুছে ফেলবে না কি ফিচার ব্রাঞ্চের পরিবর্তনগুলো রাখবে।

এক্ষেত্রে আপনাকে ম্যানুয়ালি সিদ্ধান্ত নিতে হবে:

  • যদি ফাইলটি মুছে ফেলতে চান, তাহলে git rm app.css ব্যবহার করতে পারেন।
  • যদি পরিবর্তনগুলো রাখতে চান, তাহলে git add app.css দিয়ে ফাইলটি আবার স্টেজ করুন।

3. কনফ্লিক্ট - একে অপরের সাথে একই ফাইলের নাম পরিবর্তন:

ধরা যাক, দুটি ব্রাঞ্চে app.js ফাইলটি আলাদা আলাদা ভাবে পরিবর্তিত হয়েছে:

  • Main ব্রাঞ্চ: ফাইলটির নাম app.js থেকে main.js তে পরিবর্তন করেছে।
  • Feature ব্রাঞ্চ: app.js ফাইলটি পরিবর্তন করেছে।

এখন আপনি যখন feature ব্রাঞ্চটি main ব্রাঞ্চের সাথে মার্জ করবেন, Git কনফ্লিক্টের মধ্যে পড়বে এবং জানবে না কোন ফাইলটি রাখা উচিত—নাম পরিবর্তন করা ফাইলটি না কি মূল ফাইলটি।

এক্ষেত্রে আপনি ম্যানুয়ালি কাজ করতে পারেন:

  • যদি main.js রাখতে চান, তবে git add main.js কমান্ড ব্যবহার করুন।
  • যদি app.js রাখতে চান, তবে পুরনো নামটি রেখে ফেলুন এবং মার্জ কমিট করুন।

⚡️ Conflict এ Avoid করার কৌশল

  1. প্রতিদিন Pull করুন: মার্জ কনফ্লিক্ট এড়ানোর জন্য নিয়মিত মূল ব্রাঞ্চ থেকে Pull করুন, যাতে আপনি সর্বশেষ পরিবর্তনগুলির সাথে আপডেট থাকতে পারেন।

    bash
    git pull origin main
    git pull origin main
  2. ফিচার ব্রাঞ্চ ব্যবহার করুন: সরাসরি main ব্রাঞ্চে কাজ করার পরিবর্তে, প্রতিটি নতুন ফিচারের জন্য আলাদা ব্রাঞ্চ তৈরি করুন।

  3. টিমের সাথে যোগাযোগ বজায় রাখুন: আপনার টিমের অন্য সদস্যদের সাথে নিয়মিত যোগাযোগ রাখুন, যাতে একই ফাইলের একাধিক অংশে কাজ করার সময় কনফ্লিক্ট এড়ানো যায়।

  4. কমিট ভাঙুন: ছোট ছোট পরিবর্তন করে কোডটিকে কমিট করুন। বড় পরিবর্তন একসাথে না করে, ছোট ছোট কমিটে ভাগ করুন। এতে কনফ্লিক্টের সম্ভাবনা কমে যাবে।

💡 সারাংশ

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

Merge Conflict সমাধানের এই প্রক্রিয়া শিখলে, আপনি Git-এ আরও দক্ষ হয়ে উঠবেন এবং আপনার কাজ আরও মসৃণ হবে।

Released under the MIT License.