ادغام شاخهها — git merge
ترکیب کار شاخهها با git merge، تفاوت ادغام fast-forward و سهطرفه و نحوه merge درست.
ادغام چیست؟
وقتی کارتان روی یک شاخه تمام شد، باید نتیجه را به شاخه اصلی برگردانید. این کار ادغام (Merge) نام دارد — دستور git merge تغییرات یک شاخه را با شاخه فعلی شما ترکیب میکند.
قانون طلایی merge
git merge feature بزنید.ادغام ساده: Fast-Forward
رایجترین و سادهترین حالت. فرض کنید:
- روی main بودید و شاخه
feature-searchساختید - در feature-search دو کامیت جدید زدید
- main از آن موقع هیچ کامیت جدیدی نگرفته
حالا:
# ۱. به main بروید:
git switch main
# ۲. ادغام کنید:
git merge feature-search
# Updating a1b2c3d..e5f6g7h
# Fast-forward
# hello.txt | 5 ++++-
# 1 file changed, 4 insertions(+)
چون main تغییری نکرده بود، گیت فقط اشارهگر main را جلو میبرد (Fast-Forward یعنی «سریعجلو»). تاریخچه صاف و خطی میماند:
قبل از merge:
A---B---C (main)
\
D---E (feature-search)
بعد از merge (fast-forward):
A---B---C---D---E (main, feature-search)
ادغام سهطرفه (Three-way Merge)
حالا سناریوی واقعیتر: بعد از ساخت شاخه، روی main هم کامیت جدید زدهاید. حالا دو خط جدا از هم دارید:
A---B---C---F (main)
\
D---E (feature-search)
گیت نمیتواند فقط اشارهگر را جلو ببرد — باید دو خط را واقعاً ترکیب کند:
git switch main
git merge feature-search
گیت یک کامیت ادغام (Merge Commit) میسازد که دو والد دارد:
A---B---C---F---M (main)
\ /
D---E (feature-search)
اگر ویرایشگر پیام باز شد، پیام پیشفرض Merge branch 'feature-search' را نگه دارید و ذخیره کنید.
سوئیچ --no-ff
گاهی میخواهید حتی در حالت fast-forward هم یک کامیت merge ساخته شود (تا در تاریخچه مشخص باشد که اینجا یک شاخه ادغام شده):
git merge --no-ff feature-search -m "ادغام قابلیت جستجو"
بعد از merge چه کنیم؟
وقتی شاخه merge شد و دیگر لازم نیست، حذفش کنید:
git branch -d feature-search
# Deleted branch feature-search (was e5f6g7h).
دیدن شاخههای merge شده و نشده
# شاخههایی که در شاخه فعلی merge شدهاند:
git branch --merged
# شاخههایی که هنوز merge نشدهاند:
git branch --no-merged
خلاصه
- merge = برگرداندن کار شاخه به خط اصلی
- قانون: اول به شاخه مقصد بروید، بعد شاخه دیگر را merge کنید
- Fast-forward: وقتی مقصد تغییری نکرده — فقط جلو رفتن اشارهگر
- سهطرفه: وقتی هر دو شاخه کامیت دارند — ساخت کامیت merge
- بعد از merge، شاخه اضافی را با
-dحذف کنید
این مبحث بخشی از دوره آموزش کامل Git است.