প্রথমেই একটি কথা বলে নেই — Merge conflict ভয়ের কিছু না। এটা Git ব্যবহারের একটি স্বাভাবিক অংশ। প্রতিটা professional developer প্রতি সপ্তাহে কয়েকবার conflict-এর মুখোমুখি হন। সঠিক knowledge থাকলে — ২-৩ মিনিটে fix করে ফেলা যায়।
এই পর্বে আপনি শিখবেন conflict কেন হয়, conflict marker কেমন দেখায়, এবং step-by-step কীভাবে এটি resolve করতে হয়।
🎯 এই পর্বের পর আপনি যা পারবেন
- Merge conflict কেন হয় — বুঝতে পারবেন
- Conflict marker (
<<<<,====,>>>>) পড়তে পারবেন - Manually conflict resolve করতে পারবেন
- Conflict-এর পর কীভাবে commit + push করতে হয় জানবেন
- VS Code-এর built-in conflict resolver use করতে পারবেন
- Beginner mistake এড়াতে পারবেন
🤔 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 আছে:
আপনি feature-greeting-emoji branch-এ এটি change করলেন:
একইসাথে আপনার বন্ধু main branch-এ একই line change করেছেন:
এখন আপনি feature-greeting-emoji থেকে main-এ merge করতে গেলেন:
"CONFLICT" — শব্দটা ভয় লাগছে? চলুন এটি resolve করি।
🔍 Conflict Marker কেমন দেখায়?
Git আপনার index.html file-টি automatically modify করে দেয় — যাতে আপনি দেখতে পারেন কোথায় conflict। File খুললে এমন কিছু দেখবেন:
প্রতিটি Marker-এর অর্থ:
| Marker | মানে |
|---|---|
<<<<<<< HEAD | আপনার current branch (যেখানে merge করছেন)-এর version-এর শুরু |
======= | দুটি version-এর মাঝে separator |
>>>>>>> branch-name | যে branch-কে merge করছেন তার version-এর শেষ |
💡 মনে রাখার সহজ উপায়
- HEAD = আপনি যে branch-এ আছেন এখন (Current branch — সাধারণত main)
- branch-name = যেটাকে আনছেন (Incoming branch — feature)
======== সীমানা
🛠️ Step-by-Step: Conflict Resolve করুন
Step 1: Status Check করুন
Git বলছে — index.html-এ conflict আছে। দুই branch-ই এই file modify করেছে।
Step 2: File খুলে Conflict Markers দেখুন
VS Code বা যেকোনো text editor-এ index.html খুলুন। Conflict markers (<<<, ===, >>>) দেখতে পাবেন।
Step 3: Decision নিন
৩টি option আছে:
- Option A: Current branch (HEAD)-এর version রাখুন → তাদের লাইন delete করুন
- Option B: Incoming branch-এর version রাখুন → আপনার লাইন delete করুন
- Option C: দুটি combine করুন → নতুন version তৈরি করুন
Step 4: Manually Edit করুন
মনে করুন আপনি Option C choose করছেন — দুটি combine করতে চান। File-কে এভাবে edit করুন:
Before (conflict markers সহ):
After (resolved):
গুরুত্বপূর্ণ: সব conflict marker (<<<, ===, >>>) delete করতে হবে। শুধু final code রাখুন।
Step 5: File Save করুন
Editor-এ Ctrl+S (বা Cmd+S Mac-এ) চাপুন।
Step 6: Stage করুন
এটাই Git-কে বলার সংকেত — "আমি conflict resolve করেছি, এটি ready।"
Step 7: Commit করুন
💡 Bonus tip
Conflict resolution commit-এ-m না দিলে — Git automatically একটি default message দেয় ("Merge branch ...")। সেটাও কাজ করে। কিন্তু custom message দিলে clearer।
Step 8: Push করুন
✅ Conflict resolved এবং GitHub-এ live।
🎨 VS Code-এ Conflict Resolve (Easier Way)
VS Code-এ একটি built-in conflict resolver আছে। File-এর conflict অংশের উপরে ৪টি button দেখবেন:
- Accept Current Change — শুধু HEAD-এর version রাখুন
- Accept Incoming Change — শুধু incoming branch-এর version রাখুন
- Accept Both Changes — দুটি version-ই রাখুন (একটার নিচে অন্যটা)
- Compare Changes — Side-by-side comparison দেখুন
আপনার 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 দিয়ে কাজ সহজ:
- VS Code — built-in (free, recommended)
- GitHub Desktop — graphical conflict resolver
- GitKraken — paid but powerful
- Meld (Linux), P4Merge, Beyond Compare
🚫 Merge Cancel করতে চান?
Merge-এর মাঝপথে যদি বুঝতে পারেন — "এই merge করতে চাই না!" — তাহলে cancel করতে পারেন:
এটা সব merge progress cancel করে দিবে। File-গুলো merge-এর আগের state-এ ফিরে যাবে।
🎓 Conflicts Normal — Don't Panic
প্রথম conflict দেখে নতুনদের অনেকেই panic করে। ভুল চিন্তা:
- ❌ "আমি কিছু ভুল করেছি!"
- ❌ "Project ধ্বংস হয়ে গেল!"
- ❌ "এই code আর কোনদিন save হবে না!"
সঠিক mindset:
- ✅ "Git আমাকে help চাচ্ছে — কোনটা রাখব decide করুন"
- ✅ "সব history safe — কিছুই হারায়নি"
- ✅ "৫ মিনিটে fix করে ফেলব"
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
- সবসময় pull করুন কাজ শুরুর আগে — latest version-এর উপর কাজ করুন
- Small + focused commits — বড় commit-এ বেশি conflict
- Communicate with team — কে কোন file edit করছে জানুন
- Branch বেশি দিন রাখবেন না — দ্রুত merge করুন, drift এড়াতে
- একই file দুজন একসাথে edit করবেন না — সম্ভব হলে
📋 Conflict Resolution Cheat Sheet
| Step | Command/Action |
|---|---|
| ১. কোথায় conflict দেখুন | git status |
| ২. File খুলুন editor-এ | Manually বা VS Code-এ |
| ৩. Marker পড়ুন | <<< HEAD → আপনার current===== → separator>>> branch → incoming |
| ৪. Final version লিখুন | Decision: current/incoming/combine |
| ৫. সব marker delete | Manual বা VS Code button |
| ৬. Save file | Ctrl+S / Cmd+S |
| ৭. Stage | git add <file> |
| ৮. Commit | git commit -m "Resolve merge conflict" |
| ৯. Push | git push |
| Abort merge | git merge --abort |
📝 Practice Tasks
Task 1: Conflict Markers পড়া অনুশীলন
নিচের conflict block-এ দেখুন এবং বলুন:- কোনটা current branch-এর change?
- কোনটা incoming branch-এর change?
- যদি দুটোর কোনোটাই না রাখতে চান (purple রাখতে চান) — final version কেমন হবে?
Task 2: Intentional Conflict তৈরি করে Resolve করুন
নিজে practice করতে:- আপনার My Portfolio Website-এ main branch-এ
index.html-এর title change করুন → commit + push git switch -c feature-title-test- একই title আবার change করুন (অন্যভাবে) → commit
git switch main→git merge feature-title-test- Conflict দেখবেন!
- উপরের ৯টি step follow করে resolve করুন
Task 3: VS Code Tools Try
Task 2-এর conflict-এ VS Code-এর built-in buttons explore করুন:- "Accept Current Change" — কী হয় দেখুন
- Ctrl+Z দিয়ে undo
- "Accept Incoming Change" — কী হয়
- Ctrl+Z দিয়ে undo
- "Accept Both Changes" try করুন
- শেষে নিজে manually edit করে combine করুন
🎁 আরও সাহায্য চাই? Bonus Resources দেখুন
- 📋 Cheat Sheet — সব command এক পাতায়, print-friendly
- 🎯 10 Practice Tasks — hands-on exercises
- 💼 Interview Q&A — job preparation
- ✅ Portfolio Checklist — job-ready profile তৈরির গাইড
📌 সংক্ষেপে — Summary
- ✅ Merge Conflict = একই line-এ দুটি change → Git কোনটা রাখবে decide করতে পারে না
- ✅ Conflict normal — প্রতিটি professional developer regularly face করেন
- ✅ Markers:
<<< HEAD(current),===(separator),>>> branch(incoming) - ✅ Resolve flow: status → edit file → delete markers → save → add → commit → push
- ✅ Decision: current keep / incoming keep / combine
- ✅ VS Code-এ built-in resolver — Accept Current/Incoming/Both
- ✅ Cancel merge:
git merge --abort - ✅ Conflict markers commit করবেন না — সব
<<<,===,>>>delete করুন - ✅ Prevention: regular pull, small commits, communicate
🎉 Conflict-এর ভয় কাটিয়ে দিলাম। এখন পরের পর্ব — series-এর grand finale: Advanced Git, GitHub Pages, এবং Portfolio Tips! আপনার project আমরা সারা পৃথিবীর জন্য live publish করব।
📬 Final পর্ব মিস করতে চান না?
ShadhinPath Newsletter subscribe করুন — Git & GitHub সিরিজের grand finale-এ আপনার portfolio live হবে!
📬 Newsletter Subscribe 📚 সম্পূর্ণ সিরিজ📧 Question? hello@shadhinpath.com
প্রতি সপ্তাহে নতুন বাংলা গাইড পেতে চান?
ShadhinPath Facebook page Follow করে রাখুন — Tech career, USA immigration, finance, study abroad — সব নতুন content প্রথমে এখানে আসে।
👍 Facebook-এ Follow করুন