ترکیب برنچها
وقتی کار روی یک برنچ تمام شد، باید تغییرات آن را به برنچ اصلی برگردانیم. این کار را با دستور merge انجام میدهیم.
merge ساده
ابتدا به برنچی که میخواهید برنچ دیگر را در آن ادغام کنید بروید:
git switch main
سپس برنچ مورد نظر را ادغام کنید:
git merge نامبرنچ
Fast-forward در مقابل True Merge
اگر از زمان انشعاب برنچ، هیچ تغییری روی برنچ اصلی نداده باشید، گیت یک fast-forward merge انجام میدهد. در این حالت کامیتهای برنچ مستقیماً به برنچ اصلی اضافه میشوند و کامیت merge جداگانهای ساخته نمیشود.
برای اینکه همیشه یک کامیت merge جداگانه ساخته شود (حتی در حالت fast-forward):
git merge --no-ff نامبرنچ
این روش تاریخچه را خواناتر نگه میدارد.
squash merge
اگر بخواهید تمام کامیتهای برنچ فرعی به یک کامیت تبدیل شوند:
git merge --squash نامبرنچ
بعد از این دستور باید خودتان یک بار commit بزنید.
تعارض در merge (Conflict)
وقتی دو برنچ یک خط از یک فایل را به شکلهای متفاوت تغییر داده باشند، گیت نمیتواند بهطور خودکار آنها را ترکیب کند و یک conflict ایجاد میشود.
گیت در فایل تعارضدار چنین محتوایی مینویسد:
<<<<<<< HEAD
کد برنچ فعلی
=======
کد برنچ دیگر
>>>>>>> feature/login
برای حل تعارض:
- فایل(های) دارای تعارض را باز کنید
- بین
<<<<<<<و>>>>>>>تصمیم بگیرید کدام کد باید بماند (یا هر دو را با هم ترکیب کنید) - نشانگرهای تعارض (
<<<,===,>>>) را حذف کنید - فایل را استیج و کامیت کنید:
git add فایلحلشده
git commit
لغو merge در صورت بروز تعارض
اگر میخواهید merge را لغو کنید و به وضعیت قبل از merge برگردید:
git merge --abort
نمایش تاریخچه merge
برای دیدن اینکه چه برنچهایی merge شدهاند:
git branch --merged
برای دیدن برنچهایی که هنوز merge نشدهاند:
git branch --no-merged