একটা branch-এ কাজ প্রস্তুত হয়ে গেলে, merging এর পরিবর্তন আরেকটা branch-এ আনে — সাধারণত আবার main-এ।
git switch main
git merge feature-login
# Updating a1b2c3d..e5f6g7h
# Fast-forward
# login.php | 20 ++++++++++++++++++
# 1 file changed, 20 insertions(+)Merge command পরিবর্তন পাওয়া branch-এ (এখানে, main) চলে, নামযুক্ত branch-কে (feature-login) টেনে নিয়ে আসে।
| Fast-forward merge | একটা আসল merge commit |
|---|---|
| Branch আলাদা হওয়ার পর থেকে main বদলায়নি | আলাদা হওয়ার পর থেকে main আর branch দুটোতেই নতুন commit আছে |
| Git শুধু main-এর pointer সামনে সরায় — নতুন কোনো commit তৈরি হয় না | Git specifically দুটো history জোড়া দেওয়া একটা নতুন commit তৈরি করে |
| একটা পরিষ্কার, linear history | ঠিক কোথায় branch আলাদা হয়েছিল আর আবার মিলেছিল দেখানো একটা history |
# একটা fast-forward সম্ভব হলেও একটা আসল merge commit বাধ্য করুন —
# কিছু team feature branch-এর একটা স্পষ্ট history-র জন্য এটা পছন্দ করে
git merge --no-ff feature-loginএকবার merge হয়ে গেলে, একটা feature branch সাধারণত এর কাজ করে ফেলেছে — এটা delete করা branch list-কে অনির্দিষ্টকাল বাড়তে থেকে আটকায়।
git branch -d feature-logingit log --oneline --graph --all
# * f7g8h9i Merge branch 'feature-login'
# |\
# | * e5f6g7h Add login validation
# | * d4e5f6g Add login form
# |/
# * a1b2c3d Initial commitএটা পরিষ্কারভাবে না গেলে পরে কী ঘটে
একটা branch আর main দুটোই বদলেছে এমন একই লাইন স্পর্শ করা একটা merge স্বয়ংক্রিয়ভাবে সমাধান করা যায় না — এটা একটা merge conflict, পরের lesson-এ কভার করা, আর branch নিয়ে কাজ করার একটা সম্পূর্ণ স্বাভাবিক অংশ, কিছু ভুল হয়েছে তার চিহ্ন না।