প্রথমেই একটি কথা বলে নেই — Merge conflict ভয়ের কিছু না। এটা Git ব্যবহারের একটি স্বাভাবিক অংশ। প্রতিটা professional developer প্রতি সপ্তাহে কয়েকবার conflict-এর মুখোমুখি হন। সঠিক knowledge থাকলে — ২-৩ মিনিটে fix করে ফেলা যায়।

এই পর্বে আপনি শিখবেন conflict কেন হয়, conflict marker কেমন দেখায়, এবং step-by-step কীভাবে এটি resolve করতে হয়।

🎯 এই পর্বের পর আপনি যা পারবেন

🤔 Merge Conflict কী?

Merge Conflict তখন হয় যখন Git দুটি version-কে automatically merge করতে পারে না — কারণ একই file-এর একই line-এ দুটি আলাদা change আছে।

Git অনেক smart, কিন্তু এটা কোনটা "সঠিক" সেটা decide করতে পারে না — এই decision শুধু আপনি (developer) নিতে পারেন। তাই Git আপনাকে বলে: "আমি কনফিউজড। আপনি বলে দিন কোনটা রাখব।"

সহজ analogy:

মনে করুন আপনি এবং আপনার বন্ধু একসাথে একটি Google Doc edit করছেন — কিন্তু Google Doc-এর real-time sync বন্ধ। দুজন একই sentence আলাদাভাবে edit করেছেন। যখন দুজনের কাজ merge করবেন, ১ম sentence-এর জায়গায় কোনটা রাখবেন? এটাই conflict — আপনাকেই decide করতে হবে।

🔥 Conflict কেন হয়?

সবচেয়ে সাধারণ ৪টি situation:

📌 Scenario 1: দুই branch একই line edit করেছে

আপনি feature-A branch-এ index.html-এর line 5 change করেছেন। আপনার সহকর্মী feature-B branch-এ একই file-এর একই line 5 অন্যভাবে change করেছেন। Merge করার সময় — conflict।

📌 Scenario 2: একজন delete, আরেকজন edit

একজন একটি file delete করেছে। আরেকজন একই file edit করেছে। Git বুঝতে পারে না — file delete করব না edit version রাখব?

📌 Scenario 3: Pull করার সময়

আপনি local-এ change করেছেন। ঐ time-এ remote (GitHub)-এও কেউ একই file change করেছে। git pull চালালে — conflict।

📌 Scenario 4: Two PR একই code area

দুটি PR একই file-এর একই section change করেছে। প্রথমটি merge হলো — দ্বিতীয়টির সাথে conflict।

🎬 একটি Real Example দেখি

মনে করুন আপনার index.html-এ একটি line আছে:

<h1>Welcome to my portfolio!</h1>

আপনি feature-greeting-emoji branch-এ এটি change করলেন:

<h1>🚀 Welcome to my portfolio!</h1>

একইসাথে আপনার বন্ধু main branch-এ একই line change করেছেন:

<h1>Hello! Welcome to my portfolio</h1>

এখন আপনি feature-greeting-emoji থেকে main-এ merge করতে গেলেন:

$ git switch main $ git pull $ git merge feature-greeting-emoji Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.

"CONFLICT" — শব্দটা ভয় লাগছে? চলুন এটি resolve করি।

🔍 Conflict Marker কেমন দেখায়?

Git আপনার index.html file-টি automatically modify করে দেয় — যাতে আপনি দেখতে পারেন কোথায় conflict। File খুললে এমন কিছু দেখবেন:

<body> <<<<<<< HEAD <h1>Hello! Welcome to my portfolio</h1> ======= <h1>🚀 Welcome to my portfolio!</h1> >>>>>>> feature-greeting-emoji </body>

প্রতিটি Marker-এর অর্থ:

Markerমানে
<<<<<<< HEADআপনার current branch (যেখানে merge করছেন)-এর version-এর শুরু
=======দুটি version-এর মাঝে separator
>>>>>>> branch-nameযে branch-কে merge করছেন তার version-এর শেষ

💡 মনে রাখার সহজ উপায়

🛠️ Step-by-Step: Conflict Resolve করুন

Step 1: Status Check করুন

$ git status On branch main 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: index.html

Git বলছে — index.html-এ conflict আছে। দুই branch-ই এই file modify করেছে।

Step 2: File খুলে Conflict Markers দেখুন

VS Code বা যেকোনো text editor-এ index.html খুলুন। Conflict markers (<<<, ===, >>>) দেখতে পাবেন।

Step 3: Decision নিন

৩টি option আছে:

Step 4: Manually Edit করুন

মনে করুন আপনি Option C choose করছেন — দুটি combine করতে চান। File-কে এভাবে edit করুন:

Before (conflict markers সহ):

<<<<<<< HEAD <h1>Hello! Welcome to my portfolio</h1> ======= <h1>🚀 Welcome to my portfolio!</h1> >>>>>>> feature-greeting-emoji

After (resolved):

<h1>🚀 Hello! Welcome to my portfolio</h1>

গুরুত্বপূর্ণ: সব conflict marker (<<<, ===, >>>) delete করতে হবে। শুধু final code রাখুন।

Step 5: File Save করুন

Editor-এ Ctrl+S (বা Cmd+S Mac-এ) চাপুন।

Step 6: Stage করুন

$ git add index.html

এটাই Git-কে বলার সংকেত — "আমি conflict resolve করেছি, এটি ready।"

Step 7: Commit করুন

$ git commit -m "Resolve merge conflict in index.html" [main 8d4f2a3] Resolve merge conflict in index.html

💡 Bonus tip

Conflict resolution commit-এ -m না দিলে — Git automatically একটি default message দেয় ("Merge branch ...")। সেটাও কাজ করে। কিন্তু custom message দিলে clearer।

Step 8: Push করুন

$ git push

Conflict resolved এবং GitHub-এ live।

🎨 VS Code-এ Conflict Resolve (Easier Way)

VS Code-এ একটি built-in conflict resolver আছে। File-এর conflict অংশের উপরে ৪টি button দেখবেন:

আপনার preference অনুযায়ী click করুন — VS Code automatically সব marker remove করে দিবে। তারপর save → add → commit → push।

⚠️ Auto-button-এর সীমাবদ্ধতা

"Accept Current/Incoming" দ্রুত, কিন্তু সবসময় সঠিক option না। সবচেয়ে ভালো — দুই version মন দিয়ে পড়ুন, প্রয়োজনে combine করে নিজে edit করুন।

📊 Side-by-Side Comparison Tools

Big project-এ অনেক conflict থাকলে — visual diff tools দিয়ে কাজ সহজ:

🚫 Merge Cancel করতে চান?

Merge-এর মাঝপথে যদি বুঝতে পারেন — "এই merge করতে চাই না!" — তাহলে cancel করতে পারেন:

$ git merge --abort

এটা সব merge progress cancel করে দিবে। File-গুলো merge-এর আগের state-এ ফিরে যাবে।

🎓 Conflicts Normal — Don't Panic

প্রথম conflict দেখে নতুনদের অনেকেই panic করে। ভুল চিন্তা:

সঠিক mindset:

Conflict resolve করতে পারা একটি signature skill। Job interview-এ এটা জিজ্ঞেস করা হয় — "What's a merge conflict and how do you resolve it?" — confident answer দিতে পারলে impressed হয়।

⚠️ Common Beginner Mistakes

1. Conflict markers commit করে ফেলা

সমস্যা: <<<<<, =====, >>>>> সব file-এ রেখে commit চালালেন।

সমাধান: Commit-এর আগে সব marker delete করুন। Search করে দেখুন (Ctrl+F) <<< — কিছু থাকা চলবে না।

2. git add না করে commit চেষ্টা

সমস্যা: Conflict fix করার পর সরাসরি commit — "still unmerged paths"।

সমাধান: Resolve → git add → commit। Order মনে রাখুন।

3. Conflict file-এর content delete করে empty করে দেওয়া

সমস্যা: Conflict দেখে frustrated হয়ে পুরো content delete।

সমাধান: শুধু markers delete করুন, content রাখুন। বা git merge --abort চালিয়ে শুরু থেকে।

4. Auto-button blindly click

সমস্যা: VS Code-এ "Accept Current" click — কিন্তু important changes lose।

সমাধান: দুই version পড়ে বুঝে নিন — তারপর decision।

5. Push না করা

সমস্যা: Conflict fix + commit করলেন কিন্তু push ভুলে গেলেন। Team জানে না।

সমাধান: সবসময় git push দিয়ে শেষ করুন।

6. Conflict avoid করার চেষ্টা — কাজ delete করে

সমস্যা: Conflict-এর ভয়ে নিজের code throw away করা।

সমাধান: Conflict facing it head-on। Skill develop হবে।

🛡️ Conflict-এর সম্ভাবনা কমাতে Best Practices

  1. সবসময় pull করুন কাজ শুরুর আগে — latest version-এর উপর কাজ করুন
  2. Small + focused commits — বড় commit-এ বেশি conflict
  3. Communicate with team — কে কোন file edit করছে জানুন
  4. Branch বেশি দিন রাখবেন না — দ্রুত merge করুন, drift এড়াতে
  5. একই file দুজন একসাথে edit করবেন না — সম্ভব হলে

📋 Conflict Resolution Cheat Sheet

StepCommand/Action
১. কোথায় conflict দেখুনgit status
২. File খুলুন editor-এManually বা VS Code-এ
৩. Marker পড়ুন<<< HEAD → আপনার current
===== → separator
>>> branch → incoming
৪. Final version লিখুনDecision: current/incoming/combine
৫. সব marker deleteManual বা VS Code button
৬. Save fileCtrl+S / Cmd+S
৭. Stagegit add <file>
৮. Commitgit commit -m "Resolve merge conflict"
৯. Pushgit push
Abort mergegit merge --abort

📝 Practice Tasks

Task 1: Conflict Markers পড়া অনুশীলন

নিচের conflict block-এ দেখুন এবং বলুন:
<<<<<<< HEAD color: red; ======= color: blue; >>>>>>> feature-color-update
  1. কোনটা current branch-এর change?
  2. কোনটা incoming branch-এর change?
  3. যদি দুটোর কোনোটাই না রাখতে চান (purple রাখতে চান) — final version কেমন হবে?

Task 2: Intentional Conflict তৈরি করে Resolve করুন

নিজে practice করতে:
  1. আপনার My Portfolio Website-এ main branch-এ index.html-এর title change করুন → commit + push
  2. git switch -c feature-title-test
  3. একই title আবার change করুন (অন্যভাবে) → commit
  4. git switch maingit merge feature-title-test
  5. Conflict দেখবেন!
  6. উপরের ৯টি step follow করে resolve করুন

Task 3: VS Code Tools Try

Task 2-এর conflict-এ VS Code-এর built-in buttons explore করুন:
  1. "Accept Current Change" — কী হয় দেখুন
  2. Ctrl+Z দিয়ে undo
  3. "Accept Incoming Change" — কী হয়
  4. Ctrl+Z দিয়ে undo
  5. "Accept Both Changes" try করুন
  6. শেষে নিজে manually edit করে combine করুন

🎁 আরও সাহায্য চাই? Bonus Resources দেখুন

📌 সংক্ষেপে — Summary

🎉 Conflict-এর ভয় কাটিয়ে দিলাম। এখন পরের পর্ব — series-এর grand finale: Advanced Git, GitHub Pages, এবং Portfolio Tips! আপনার project আমরা সারা পৃথিবীর জন্য live publish করব।

← আগের পর্ব
পর্ব ৮: Pull Request
পরের পর্ব → (Finale!)
পর্ব ১০: Advanced + Portfolio

📬 Final পর্ব মিস করতে চান না?

ShadhinPath Newsletter subscribe করুন — Git & GitHub সিরিজের grand finale-এ আপনার portfolio live হবে!

📬 Newsletter Subscribe 📚 সম্পূর্ণ সিরিজ

📧 Question? hello@shadhinpath.com

f

প্রতি সপ্তাহে নতুন বাংলা গাইড পেতে চান?

ShadhinPath Facebook page Follow করে রাখুন — Tech career, USA immigration, finance, study abroad — সব নতুন content প্রথমে এখানে আসে।

👍 Facebook-এ Follow করুন