ادغام شاخهها و رفع تعارضها (Merge & Resolve Conflicts) در Git
Chapter 9: Git Merge and Resolve Conflicts

وقتی چند نفر بهطور همزمان روی پروژه کار میکنند، تغییرات آنها باید در یکجا جمع شود. در Git این کار با Merge انجام میشود. اما همیشه همهچیز بیدردسر پیش نمیرود؛ گاهی اوقات دو نفر یک فایل یا حتی یک خط کد را تغییر میدهند و Git نمیداند کدام را باید نگه دارد. به این موقعیت Conflict میگوییم.
در این فصل یاد میگیریم چطور شاخهها را Merge کنیم و تعارضها را بهدرستی برطرف کنیم.
Git Merge چیست؟
Merge در Git فرآیندی است که تغییرات یک Branch را به Branch دیگر ادغام میکند.
- معمولاً تغییرات شاخههای ویژگی (Feature Branches) به شاخهی اصلی (
main
) Merge میشوند. - Git تلاش میکند تغییرات را بهطور خودکار ترکیب کند.
انواع Merge در Git
1. Fast-Forward Merge
اگر شاخه مقصد (مثلاً main
) هیچ Commit جدیدی نداشته باشد، Git فقط اشارهگر شاخه را به آخرین Commit شاخه مبدا منتقل میکند.
git checkout main
git merge feature-login
این حالت سادهترین نوع Merge است.
2. Three-Way Merge
اگر هر دو شاخه تغییراتی داشته باشند، Git از Commit والد مشترک استفاده میکند و تغییرات هر دو شاخه را ترکیب میکند.
- نتیجه: یک Commit جدید Merge ساخته میشود.
Conflict در Git چیست؟
Conflict زمانی رخ میدهد که تغییرات دو شاخه روی یک بخش از کد با هم تداخل داشته باشند.
مثال:
- شاخه
main
:
<h1>Hello World</h1>
- شاخه
feature-login
:
<h1>Welcome User</h1>
اگر این دو شاخه Merge شوند، Git نمیداند باید کدام خط را نگه دارد.
شناسایی و مدیریت Conflict
1. شروع Merge
git checkout main
git merge feature-login
2. پیام Conflict
Git به شما اعلام میکند که فایلها Conflict دارند.
3. فایل Conflict چگونه نمایش داده میشود
Git فایل را به این شکل علامتگذاری میکند:
<<<<<<< HEAD
<h1>Hello World</h1>
=======
<h1>Welcome User</h1>
>>>>>>> feature-login
- بخش بالایی (HEAD) تغییرات شاخه مقصد (
main
). - بخش پایینی تغییرات شاخه مبدا (
feature-login
).
4. رفع Conflict
فایل را باز کنید و تغییرات نهایی را بهصورت دستی انتخاب یا ترکیب کنید.
مثلاً:
<h1>Welcome to Git World</h1>
5. علامتگذاری Conflict بهعنوان حلشده
بعد از ویرایش فایل:
git add filename
git commit
ابزارهای کمکی برای حل Conflict
- خط فرمان (CLI) → ساده و سریع برای پروژههای کوچک.
- ابزارهای گرافیکی مثل:
- VS Code (دارای رابط کاربری داخلی برای حل Conflict)
- GitKraken
- SourceTree
بهترین شیوهها در Merge و Conflict Resolution
- Commitهای کوچک و منظم → پیدا کردن علت Conflict راحتتر میشود.
- بهروز نگه داشتن شاخهها → قبل از شروع Merge، شاخه خود را با
main
هماهنگ کنید. - ارتباط در تیم → قبل از تغییرات بزرگ، با همکاران هماهنگ کنید.
- استفاده از Pull Request → بررسی کد قبل از Merge به کاهش Conflict کمک میکند.
جمعبندی
- Merge فرآیندی است برای ترکیب تغییرات شاخهها.
- دو نوع Merge وجود دارد: Fast-Forward و Three-Way Merge.
- Conflict زمانی رخ میدهد که تغییرات دو شاخه روی یک بخش از کد با هم تداخل داشته باشند.
- برای حل Conflict باید فایلها را ویرایش کرده، تغییرات درست را انتخاب کنید و سپس Commit جدید بسازید.
در فصل بعد (Chapter 10: Explore Remote Repositories with GitHub) یاد میگیریم چطور از GitHub برای مدیریت پروژهها و همکاری تیمی استفاده کنیم.