মার্জ কনফ্লিক্ট: আতঙ্কিত না হয়ে বুঝুন এবং সমাধান করুন
মার্জ কনফ্লিক্ট নতুনদের ভয় দেখায়, কিন্তু এই বিভাগের পরে আপনি সেগুলো শান্তভাবে মোকাবেলা করবেন। আমরা দেখব কেন কনফ্লিক্ট হয় (Git মন পড়তে পারে না — এটি জানে না কার পরিবর্তন বেশি গুরুত্বপূর্ণ), কীভাবে কনফ্লিক্ট মার্কার পড়তে হয় এবং সঠিক সমাধান নির্বাচন করতে হয়। আমরা দুটি পদ্ধতি দেখাব: ম্যানুয়াল রেজোলিউশন এবং মার্জ টুলস ব্যবহার করা।
- আপনি মার্জ কনফ্লিক্টের প্রকৃতি বুঝবেন এবং সেগুলোকে ভয় পাওয়া বন্ধ করবেন — এগুলো ভবিষ্যদ্বাণীযোগ্য হয়ে উঠবে।
- আপনি নিজে নিজে Git মার্কার সঠিকভাবে পড়ে ম্যানুয়ালি কনফ্লিক্ট সমাধান করতে পারবেন।
- আপনি আপনার এডিটরে মার্জ টুল কনফিগার করে ভিজ্যুয়ালি কনফ্লিক্ট সমাধান করতে শিখবেন।
จุดเริ่มต้นของบทเรียน
তিন ধরনের মার্জ সংঘাত
- কন্টেন্ট: একই লাইনে পরিবর্তন
- নামকরণ: ফাইল পরিবর্তন ও নতুন নামকরণ
- মুছে ফেলা: একটি শাখায় ফাইল মুছে ফেলা, অন্যটিতে পরিবর্তন
- নামকরণ—Git-এর জন্য সবচেয়ে জটিল
- সন্দেহজনক সংঘাতে ফাইলের ইতিহাস পরীক্ষা করুন
ধরুন আপনি একটি গুরুত্বপূর্ণ প্রকল্পে কাজ করছেন, এবং হঠাৎ Git একটি সংঘাতের কথা জানায়। সমাধানের প্রথম ধাপ হল এর ধরন বোঝা। কন্টেন্ট সংঘাত দেখা দেয় যখন বিভিন্ন শাখায় একই লাইনে পরিবর্তন আনা হয়। নামকরণের ক্ষেত্রে জটিলতা বেশি: একজন ডেভেলপার ফাইলের নাম পরিবর্তন করে, অন্যজন একই সময়ে এর বিষয়বস্তু সম্পাদনা করে। তৃতীয় ধরনটি হল মুছে ফেলা, যখন একটি শাখায় ফাইল অদৃশ্য হয় কিন্তু অন্যটিতে থাকে। নামকরণই প্রায়শই সবচেয়ে বেশি সমস্যা সৃষ্টি করে, কারণ Git নাম পরিবর্তনের পরে ফাইলের ইতিহাস সঠিকভাবে ট্র্যাক করতে পারে না। তাই সন্দেহজনক সংঘাতে সবসময় ফাইলের পরিবর্তনের ইতিহাস পরীক্ষা করুন।
একটি জটিল সংঘাতের অ্যানাটমি
- <<<<<<< চিহ্ন আপনার পরিবর্তন দেখায়
- ======= আপনার এবং অপরের সংস্করণ আলাদা করে
- >>>>>>> সংঘাত ব্লকের শেষ চিহ্নিত করে
- git status সব সমস্যাযুক্ত ফাইল দেখাবে
- git diff — পরিবর্তনের বিস্তারিত তুলনা
ধরুন আপনি 'feature' শাখাটিকে 'main'-এ মার্জ করছেন এবং একটি সংঘাতের বার্তা দেখতে পাচ্ছেন। সমস্যাযুক্ত ফাইলগুলি খুলুন—আপনি বিশেষ চিহ্নিতকারী দেখতে পাবেন। <<<<<<< HEAD এবং =======-এর মধ্যে যা কিছু আছে, সেটা আপনার পরিবর্তন। ======= এবং >>>>>>> feature-এর মধ্যে যা কিছু, সেটা মার্জ করা শাখার পরিবর্তন। সমস্ত সংঘাতগ্রস্ত ফাইল দেখতে git status ব্যবহার করুন, এবং বিস্তারিত পার্থক্য দেখতে git diff ব্যবহার করুন। মনে রাখবেন: চিহ্নিতকারীগুলি ত্রুটি নয়, বরং সেগুলি নির্দেশ করে যেখানে আপনাকে সিদ্ধান্ত নিতে হবে।
#!/bin/bash
# conflict_analysis.sh
echo "টেস্ট রিপোজিটরি তৈরি করা হচ্ছে"
mkdir conflict-demo && cd conflict-demo
git init
echo "ফাইল তৈরি এবং main-এ প্রথম কমিট"
echo 'Line 1' > file.txt
echo 'Line 2' >> file.txt
git add . && git commit -m 'প্রাথমিক কমিট'
echo "feature শাখা তৈরি এবং প্রথম লাইন পরিবর্তন"
git checkout -b feature
sed -i 's/Line 1/Line 1 modified in feature/' file.txt
git commit -am 'Feature-এ লাইন 1 পরিবর্তন'
echo "main-এ ফিরে এসে একই লাইন পরিবর্তন"
git checkout main
sed -i 's/Line 1/Line 1 modified in main/' file.txt
git commit -am 'Main-এ লাইন 1 পরিবর্তন'
echo "শাখা মার্জ করার চেষ্টা"
git merge feature || echo 'সংঘাত!'
echo "\nস্ট্যাটাস দেখা হচ্ছে:"
git status --short
echo "\nসংঘাতগ্রস্ত ফাইল দেখানো হচ্ছে:"
cat file.txt
সংঘাত সমাধানের কৌশল
- ম্যানুয়াল এডিটিং: চিহ্নিতকারী মুছে ফেলা, প্রয়োজনীয় অংশ রাখা
- GUI টুল: meld, kdiff3 ভিজুয়াল তুলনার জন্য
- --ours/--theirs: নিজের বা অপরের সংস্করণ গ্রহণ
- Rebase-এ প্রতিটি কমিটের জন্য সংঘাত সমাধান করতে হয়
- সমাধানের পরে—git add এবং git commit করতে ভুলবেন না
যখন সংঘাত সনাক্ত হয়, আপনার কাছে বেশ কয়েকটি উপায় থাকে। আপনি ম্যানুয়ালি ফাইল খুলে সম্পাদনা করতে পারেন, চিহ্নিতকারী মুছে ফেলতে পারেন এবং প্রয়োজনীয় কোড রেখে দিতে পারেন। ভিজুয়ালদের জন্য meld বা kdiff3-এর মতো টুল উপযোগী—এগুলো একসঙ্গে তিনটি সংস্করণ দেখায়। যদি নিজের পরিবর্তনে আত্মবিশ্বাসী হন, তাহলে নিজের সংস্করণ রাখতে git checkout --ours ব্যবহার করুন, অথবা অপরের জন্য --theirs ব্যবহার করুন। Rebase-এর সময় বিশেষভাবে সতর্ক থাকতে হবে: এখানে প্রতিটি রিবেস করা কমিটে সংঘাত দেখা দিতে পারে।
#!/bin/bash
# resolve_strategies.sh
echo "পদ্ধতি 1: ম্যানুয়াল সমাধান"
echo 'ফাইল সম্পাদনা করে সংঘাতের চিহ্নিতকারী মুছে ফেলুন'
echo 'তারপর চালান: git add file.txt'
echo "\nপদ্ধতি 2: আমাদের সংস্করণ গ্রহণ"
git checkout --ours file.txt
echo "\nপদ্ধতি 3: তাদের সংস্করণ গ্রহণ"
git checkout --theirs file.txt
echo "\nপদ্ধতি 4: মার্জ টুল ব্যবহার"
echo 'git mergetool --tool=meld'
echo "\nপদ্ধতি নির্বাচনের পর মার্জ শেষ করুন:"
echo 'git commit -m "মার্জ সংঘাত সমাধান"'
บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก
ฉบับเต็มมีสไลด์เพิ่มอีก 34 สไลด์
วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก
เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิกเนื้อหาบทเรียน
- তিন ধরনের মার্জ সংঘাত
- একটি জটিল সংঘাতের অ্যানাটমি
- সংঘাত সমাধানের কৌশল
- প্রতিরোধ এবং সর্বোত্তম অনুশীলন
- Git-এ মাল্টি-লাইন সংঘাত কীভাবে পড়বেন
- প্রসঙ্গ চিহ্নিতকারীর ব্যাখ্যা
- নেস্টেড সংঘাত: সমাধানের কৌশল
- অটোমেশন এবং উন্নত টুলস
- নির্বাচনের কৌশল: HEAD নাকি ব্রাঞ্চ?
- 'ন্যূনতম বিস্ময়' নীতি
- সিম্যান্টিক কনফ্লিক্ট: অদৃশ্য শত্রু
- টুলস এবং অটোমেশন
- টুল নির্বাচন: কখন কী ব্যবহার করবেন
- VS Code: কনফিগারেশন এবং উন্নত ফিচার
- Beyond Compare: জটিল কনফ্লিক্টের জন্য পরিস্থিতি
- গিট ফ্লোতে ইন্টিগ্রেশন এবং অটোমেশন
- .gitattributes-এর মাধ্যমে মার্জ অটোমেট করা
- নিজস্ব মার্জ ড্রাইভার তৈরি
- গিট rerere — আপনার ব্যক্তিগত সহকারী
- উন্নত অটোমেশন কৌশল
- বড় টিমের জন্য ওয়ার্কফ্লো ডিজাইন
- কোড রিভিউ: কনফ্লিক্ট প্রতিরোধের হাতিয়ার
- দীর্ঘস্থায়ী ফিচার ব্রাঞ্চ নিয়ে কাজের কৌশল
- সরঞ্জাম এবং দ্বন্দ্ব সমাধানের স্বয়ংক্রিয়করণ
- অন্ধভাবে পরিবর্তন গ্রহণের বিপদ
- নিরাপদ দ্বন্দ্ব সমাধানের কৌশল
- মার্জের পরে পরীক্ষা: কী পরীক্ষা করবেন
- CI/CD এর সাথে ইন্টিগ্রেশন এবং প্রতিরোধমূলক ব্যবস্থা
- rebase এ দ্বন্দ্ব merge থেকে কীভাবে আলাদা
- --rebase-merges নিয়ে কাজ করা
- ক্রমান্বিত দ্বন্দ্ব সমাধানের কৌশল
- উন্নত কৌশল এবং রিবেস ডিবাগিং
- CI/CD একটি মান নিয়ন্ত্রণ ব্যবস্থা হিসেবে
- GitHub Actions: দ্বন্দ্ব পরীক্ষা
- Danger-JS: বুদ্ধিমান অটোমেশন চেক
- CI/CD এ স্বয়ংক্রিয় দ্বন্দ্ব সমাধান
- দ্বন্দ্ব: আতঙ্ক থেকে আত্মবিশ্বাসে
บทความเกี่ยวกับบทเรียนนี้
- git merge: วิธีรวมบรานช์และแก้ความขัดแย้ง
- Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
- วิธีติดตั้ง Git บน Windows, macOS และ Linux
- Git คืออะไร และนักพัฒนาต้องใช้เพื่ออะไร
- Git Bash: คืออะไร และใช้งานบน Windows อย่างไร
บทเรียนทั้งหมดในคอร์สนี้
- গিটের ভূমিকা: শুরু থেকে আত্মবিশ্বাসী ডেভেলপার পর্যন্ত
- কেন আদৌ Git প্রয়োজন — এবং কেন এটি ছাড়া চাকরি পাওয়া যায় না
- ইনস্টল এবং কনফিগারেশন: প্রথম চালানোর জন্য Git প্রস্তুত করা
- প্রথম রিপোজিটরি: init, add, commit এবং ইনডেক্সের যাদু
- ইতিহাস পড়া: log, diff, show এবং অতীতে নেভিগেশন
- শাখা: আপনার কোডের সমান্তরাল বাস্তবতা
- ভুল বাতিল: restore, reset, revert — সঠিক ও বিপজ্জনক ব্যবহার
- গিটহাব ও দূরবর্তী রিপোজিটরি: আপনার কোড ক্লাউডে
- দলগত কাজ: ফর্ক, ফিচার ব্রাঞ্চ এবং পুল রিকোয়েস্ট
- মার্জ কনফ্লিক্ট: আতঙ্কিত না হয়ে বুঝুন এবং সমাধান করুন
- বাস্তব দলে গিট প্রক্রিয়া: কোন ওয়ার্কফ্লো বেছে নেবেন
- উন্নত টুল: রিবেস, স্ট্যাশ, চেরি-পিক এবং ট্যাগ
- চূড়ান্ত প্রকল্প: বাস্তব দলগত উন্নয়ন সিমুলেশন