গিট রিবেস
রিবেস কি?
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 তখনই ব্যবহার করো যখন তুমি পুরোপুরি বুঝতে পারবে কি হচ্ছে!