Gitبرنامه نویسی Programming

ادغام شاخه‌ها و رفع تعارض‌ها (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 تلاش می‌کند تغییرات را به‌طور خودکار ترکیب کند.

02 Branch 1 kopiera

انواع 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

  1. Commitهای کوچک و منظم → پیدا کردن علت Conflict راحت‌تر می‌شود.
  2. به‌روز نگه داشتن شاخه‌ها → قبل از شروع Merge، شاخه خود را با main هماهنگ کنید.
  3. ارتباط در تیم → قبل از تغییرات بزرگ، با همکاران هماهنگ کنید.
  4. استفاده از Pull Request → بررسی کد قبل از Merge به کاهش Conflict کمک می‌کند.

جمع‌بندی

  • Merge فرآیندی است برای ترکیب تغییرات شاخه‌ها.
  • دو نوع Merge وجود دارد: Fast-Forward و Three-Way Merge.
  • Conflict زمانی رخ می‌دهد که تغییرات دو شاخه روی یک بخش از کد با هم تداخل داشته باشند.
  • برای حل Conflict باید فایل‌ها را ویرایش کرده، تغییرات درست را انتخاب کنید و سپس Commit جدید بسازید.

در فصل بعد (Chapter 10: Explore Remote Repositories with GitHub) یاد می‌گیریم چطور از GitHub برای مدیریت پروژه‌ها و همکاری تیمی استفاده کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا