Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

গিট রিবেস

রিবেস কি?

git rebase দিয়ে তুমি তোমার ব্রাঞ্চের কমিটগুলো অন্য ব্রাঞ্চের উপর বসাতে পারো। শুনতে কনফিউজিং লাগছে? চলো উদাহরণ দিয়ে বুঝি।

merge vs rebase

ধরো তুমি feature ব্রাঞ্চে কাজ করছো, আর main ব্রাঞ্চেও নতুন কমিট হচ্ছে।

merge করলে

main:    A ── B ── C ── D ── M (merge commit)
                 \         /
feature:          E ── F ──

একটা বাড়তি merge commit তৈরি হয়। হিস্ট্রিতে ব্রাঞ্চিং দেখা যায়।

rebase করলে

main:    A ── B ── C ── D ── E' ── F'

তোমার কমিটগুলো (E, F) main এর শেষে বসে যায়। হিস্ট্রি সোজা লাইনে থাকে, পরিষ্কার দেখায়!

কিভাবে রিবেস করবে?

ধাপ ১: feature ব্রাঞ্চে যাও

git switch feature

ধাপ ২: main এর উপর রিবেস করো

git rebase main

আউটপুট:

Successfully rebased and updated refs/heads/feature.

ধাপ ৩: main এ গিয়ে merge করো

git switch main
git merge feature

এটা একটা “fast-forward” merge হবে — মানে কোনো বাড়তি merge commit নেই!

রিবেসে কনফ্লিক্ট হলে

কনফ্লিক্ট হলে গিট থামবে আর বলবে কোথায় কনফ্লিক্ট:

# কনফ্লিক্ট ফিক্স করো (ফাইল এডিট করো)

# ফিক্স করা ফাইল স্টেজ করো
git add .

# রিবেস চালিয়ে যাও
git rebase --continue

রিবেস বাতিল করতে চাইলে:

git rebase --abort

রিবেসের সুবিধা

  • হিস্ট্রি পরিষ্কার আর সোজা থাকে
  • বাড়তি merge commit হয় না
  • git log --oneline দেখতে অনেক সুন্দর লাগে

রিবেসের সমস্যা

  • হিস্ট্রি রিরাইট হয়
  • পুশ করা কমিট রিবেস করলে ঝামেলা হতে পারে

সোনালী নিয়ম

কখনো পাবলিক/শেয়ার করা ব্রাঞ্চে রিবেস করো না!

মানে — যদি তোমার ব্রাঞ্চ গিটহাবে পুশ করে থাকো এবং অন্যরাও ঐ ব্রাঞ্চে কাজ করছে, তাহলে রিবেস করো না। মার্জ ব্যবহার করো।

রিবেস শুধু তোমার লোকাল ব্রাঞ্চে ব্যবহার করো যেটা এখনো পুশ করোনি।

কখন কোনটা ব্যবহার করবে?

পরিস্থিতিব্যবহার করো
টিমে কাজ, শেয়ার করা ব্রাঞ্চmerge
একা কাজ, লোকাল ব্রাঞ্চrebase
পরিষ্কার হিস্ট্রি চাওrebase
নিরাপদে থাকতে চাওmerge

টিপ: শুরুতে merge ব্যবহার করো। rebase তখনই ব্যবহার করো যখন তুমি পুরোপুরি বুঝতে পারবে কি হচ্ছে!