A সংঘাত একত্রীকরণ ঘটবে যখন গিট স্বয়ংক্রিয়ভাবে পরিবর্তনগুলিকে একত্রিত করতে পারে না কারণ দুটি শাখা একই লাইনকে ভিন্নভাবে পরিবর্তন করেছে। এটি সহযোগিতার একটি স্বাভাবিক অংশ — কোনো ত্রুটি নয়, শুধু গিট আপনাকে সিদ্ধান্ত নিতে বলছে। আত্মবিশ্বাসের সাথে বিরোধগুলি কীভাবে সমাধান করা যায় তা এখানে।
📋 Table of Contents
- একীভূত দ্বন্দ্বের কারণ কি
- দ্বন্দ্ব চিহ্নিতকারী বোঝা
- ধাপে ধাপে সমাধান
- একাধিক দ্বন্দ্ব সমাধান করা
- একটি মার্জ টুল ব্যবহার করে
- একীভূতকরণ বাতিল করা হচ্ছে
- পুনর্বাসনের সময় দ্বন্দ্বের সমাধান করা
- দ্বন্দ্ব প্রতিরোধ
- প্রশ্নঃ দ্বন্দ্ব চিহ্নিতকারী বলতে কি বুঝায়?
- মার্জ দ্বন্দ্বগুলি সহযোগিতার একটি স্বাভাবিক অংশ, ত্রুটি নয় — গিট আপনাকে সিদ্ধান্ত নিতে বলছে যখন দুটি শাখা একই কোড ভিন্নভাবে পরিবর্তন করেছে। সমাধান প্রক্রিয়া:
একীভূত দ্বন্দ্বের কারণ কি
আপনি যখন মার্জ করেন (বা রিবেস, বা টান) এবং উভয় শাখাই একটি ফাইলের একই অংশ ভিন্নভাবে পরিবর্তন করেন, তখন গিট সিদ্ধান্ত নিতে পারে না কোন পরিবর্তনটি রাখা হবে – তাই এটি থামবে এবং আপনাকে জিজ্ঞাসা করবে। আপনি দেখতে পাবেন:
$ git merge feature-branch
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.
দ্বন্দ্ব চিহ্নিতকারী বোঝা
<<<<<<< HEAD
const greeting = "Hello from main branch";
=======
const greeting = "Hi from feature branch";
>>>>>>> feature-branch
// The markers mean:
// <<<<<<< HEAD → your current branch's version (above =======)
// ======= → divider
// >>>>>>> feature-branch → the incoming branch's version (below =======)
ধাপে ধাপে সমাধান
# 1. See which files have conflicts
git status
# Unmerged paths:
# both modified: app.js
# 2. Open each conflicted file and find the conflict markers
# 3. Edit the file to the desired final state - choose one version,
# combine both, or write something new. REMOVE the markers.
# Before (with markers):
<<<<<<< HEAD
const greeting = "Hello from main branch";
=======
const greeting = "Hi from feature branch";
>>>>>>> feature-branch
# After (resolved - you decided):
const greeting = "Hi from feature branch";
# 4. Stage the resolved file
git add app.js
# 5. Complete the merge
git commit # opens editor with a default merge message, or:
git commit -m "Merge feature-branch, resolve greeting conflict"
একাধিক দ্বন্দ্ব সমাধান করা
# A file (or several) may have multiple conflict sections.
# Find them all:
grep -n "<<<<<<<" app.js # find conflict markers
# Resolve each section, then verify none remain:
grep -rn "<<<<<<<\|=======\|>>>>>>>" .
# Should return nothing when all conflicts are resolved
# Then stage all resolved files and commit
git add .
git commit
একটি মার্জ টুল ব্যবহার করে
# Configure and use a visual merge tool (easier for complex conflicts)
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'
# Launch the tool for conflicts
git mergetool
# VS Code (or your tool) shows current/incoming/result panes for easy resolution
# VS Code also has built-in conflict resolution - it shows
# "Accept Current / Accept Incoming / Accept Both" buttons inline
একীভূতকরণ বাতিল করা হচ্ছে
# If you want to cancel the merge and start over
git merge --abort
# Returns your branch to the state before the merge - nothing changed
# For a conflicted rebase:
git rebase --abort
# For a conflicted pull:
git merge --abort # (a pull is a fetch + merge)
পুনর্বাসনের সময় দ্বন্দ্বের সমাধান করা
# Rebase conflicts are resolved similarly, but per-commit:
git rebase main
# CONFLICT in app.js
# 1. Resolve the conflict in the file
# 2. Stage it
git add app.js
# 3. Continue the rebase (NOT commit)
git rebase --continue
# Repeat if more commits have conflicts
দ্বন্দ্ব প্রতিরোধ
- ঘন ঘন টান: প্রধান শাখার সাথে বর্তমান থাকা বিচ্ছিন্নতা এবং দ্বন্দ্ব হ্রাস করে
- ছোট, ফোকাসড কমিট করুন: বৃহৎ সুইপিং পরিবর্তনের চেয়ে একত্রিত হওয়া সহজ
- আপনার দলের সাথে যোগাযোগ করুন: ওভারল্যাপিং পরিবর্তনগুলি এড়াতে কে কী কাজ করছে তা সমন্বয় করুন প্রায়শই মার্জ/রিবেস করুন:
- শাখাগুলিকে সপ্তাহের জন্য আলাদা হতে না দিয়ে নিয়মিত পরিবর্তনগুলিকে একীভূত করুনশাখা স্বল্পস্থায়ী রাখুন:
- দীর্ঘকাল ধরে চলমান শাখায় দ্বন্দ্ব জমেপ্রায়শই জিজ্ঞাসিত প্রশ্ন
প্রশ্নঃ দ্বন্দ্ব চিহ্নিতকারী বলতে কি বুঝায়?
আপনার বর্তমান শাখার সংস্করণ শুরু হয়,
A: <<<<<<< HEAD ইনকামিং সংস্করণ থেকে এটি ভাগ করে, এবং======= ইনকামিং সংস্করণ শেষ হয়। আপনার পছন্দসই চূড়ান্ত অবস্থায় ফাইলটি সম্পাদনা করুন এবং তিনটি চিহ্নিতকারীকে সরান, তারপর স্টেজ এবং কমিট করুন।>>>>>>> branch-nameপ্রশ্ন: কোন সংস্করণটি রাখতে হবে তা আমি কীভাবে বেছে নেব?
উত্তর: প্রতিটি পরিবর্তন কী করে তা বুঝুন, তারপর সিদ্ধান্ত নিন: আপনার রাখুন, তাদের রাখুন, উভয়কে একত্রিত করুন বা নতুন কিছু লিখুন। কোন স্বয়ংক্রিয় “সঠিক” উত্তর নেই – এটি কোডটি কী করা উচিত তার উপর নির্ভর করে। অনিশ্চিত হলে, যে ব্যক্তি অন্য পরিবর্তন করেছে তাকে জিজ্ঞাসা করুন। সঠিক চূড়ান্ত অবস্থায় সম্পাদনা করুন।
প্রশ্নঃ আমি সমাধান করতে ভুল করেছি। আমি কিভাবে শুরু করব?
উত্তর: আপনি যদি এখনও প্রতিশ্রুতিবদ্ধ না হন, দৌড়ান
(বাgit merge --abort) বাতিল করতে এবং প্রি-মার্জ অবস্থায় ফিরে যেতে। তারপর আবার মার্জ শুরু করুন। আপনি যদি ইতিমধ্যে একটি খারাপ রেজোলিউশন করে থাকেন, তাহলে আপনি মার্জ কমিট প্রত্যাবর্তন বা রিসেট করতে পারেন।git rebase --abortপ্রশ্ন: আমি কিভাবে জানি যে সমস্ত দ্বন্দ্ব সমাধান করা হয়েছে?
উঃ রান
(কোনও একত্রিত করা পথ অবশিষ্ট নেই) এবং অবশিষ্ট মার্কারগুলির জন্য অনুসন্ধান করুন:git status কিছুই ফেরত দেওয়া উচিত নয়। ফাইলে অবশিষ্ট দ্বন্দ্ব চিহ্নিতকারী বাগ সৃষ্টি করে, তাই প্রতিশ্রুতি দেওয়ার আগে সর্বদা যাচাই করুন যে কোনোটি অবশিষ্ট নেই।grep -rn "<<<<<<<" .প্রশ্নঃ কেন আমি রিবেসের সময় একই দ্বন্দ্ব পেতে থাকি?
উত্তর: রিবেস আপনার কমিটগুলিকে একবারে একটি প্রয়োগ করে, তাই একই কোড স্পর্শ করলে একাধিক কমিট জুড়ে একটি দ্বন্দ্ব পুনরাবৃত্তি হতে পারে। প্রতিটি সমাধান করুন,
, এবংgit add. যদি এটি সত্যিকারের পুনরাবৃত্তিমূলক হয়, বিবেচনা করুনgit rebase --continue (রেকর্ড করা রেজোলিউশন পুনঃব্যবহার করুন) বা রিবেসিংয়ের পরিবর্তে মার্জ করুন।git rerereউপসংহার
মার্জ দ্বন্দ্বগুলি সহযোগিতার একটি স্বাভাবিক অংশ, ত্রুটি নয় — গিট আপনাকে সিদ্ধান্ত নিতে বলছে যখন দুটি শাখা একই কোড ভিন্নভাবে পরিবর্তন করেছে। সমাধান প্রক্রিয়া:
এর সাথে বিরোধপূর্ণ ফাইল খুঁজুন , সেগুলি খুলুন এবং দ্বন্দ্ব চিহ্নিতকারীগুলি সনাক্ত করুন ( ), মার্কারগুলি সরিয়ে আপনার পছন্দসই চূড়ান্ত অবস্থায় সম্পাদনা করুন, তারপর এবংgit status. জটিল দ্বন্দ্বের জন্য একটি ভিজ্যুয়াল মার্জ টুল (ভিএস কোড) ব্যবহার করুন, এবং<<<<<<< HEAD / ======= / >>>>>>> প্রয়োজন হলে আবার শুরু করতে। রিবেস চলাকালীন, প্রতি-কমিট সমাধান করুন এবং ব্যবহার করুনgit add. ঘন ঘন টেনে, ছোট ছোট প্রতিশ্রুতি তৈরি করে এবং শাখাগুলিকে স্বল্পস্থায়ী করে দ্বন্দ্ব প্রতিরোধ করুন। একবার আপনি মার্কার এবং প্রক্রিয়াটি বুঝতে পারলে, দ্বন্দ্বগুলি রুটিন হয়ে যায় — শুধু গিট এমন একটি সিদ্ধান্তের জন্য জিজ্ঞাসা করুন যা আপনি নিতে সজ্জিত।git commit. ঘন ঘন টেনে, ছোট ছোট প্রতিশ্রুতি তৈরি করে এবং শাখাগুলিকে স্বল্পস্থায়ী করে দ্বন্দ্ব প্রতিরোধ করুন। একবার আপনি মার্কার এবং প্রক্রিয়াটি বুঝতে পারলে, দ্বন্দ্বগুলি রুটিন হয়ে যায় — শুধু গিট এমন একটি সিদ্ধান্তের জন্য জিজ্ঞাসা করুন যা আপনি নিতে সজ্জিত।git merge --abort. ঘন ঘন টেনে, ছোট ছোট প্রতিশ্রুতি তৈরি করে এবং শাখাগুলিকে স্বল্পস্থায়ী করে দ্বন্দ্ব প্রতিরোধ করুন। একবার আপনি মার্কার এবং প্রক্রিয়াটি বুঝতে পারলে, দ্বন্দ্বগুলি রুটিন হয়ে যায় — শুধু গিট এমন একটি সিদ্ধান্তের জন্য জিজ্ঞাসা করুন যা আপনি নিতে সজ্জিত।git rebase --continue. ঘন ঘন টেনে, ছোট ছোট প্রতিশ্রুতি তৈরি করে এবং শাখাগুলিকে স্বল্পস্থায়ী করে দ্বন্দ্ব প্রতিরোধ করুন। একবার আপনি মার্কার এবং প্রক্রিয়াটি বুঝতে পারলে, দ্বন্দ্বগুলি রুটিন হয়ে যায় — শুধু গিট এমন একটি সিদ্ধান্তের জন্য জিজ্ঞাসা করুন যা আপনি নিতে সজ্জিত।
🔗 Share this article
✍️ Leave a Comment