تعارض ادغام (Merge Conflicts) و حل آن

تعارض در ادغام چیست، چرا اتفاق می‌افتد و چطور مثل یک حرفه‌ای آن را حل کنید — قدم‌به‌قدم.

تعارض چیست؟

گاهی هنگام merge، گیت نمی‌داند چطور دو شاخه را ترکیب کند: وقتی هر دو شاخه یک بخش از یک فایل را به شکل متفاوت تغییر داده‌اند. به این وضعیت تعارض (Conflict) می‌گویند.

تعارض یک خطا نیست — یک وضعیت طبیعی کار تیمی است! هر برنامه‌نویسی با آن سروکار دارد. مهم این است که بدانید چطور حلش کنید.

ساخت یک تعارض (آزمایشگاهی!)

بیایید عمداً یک تعارض بسازیم تا یاد بگیریم:

# ۱. روی main خط اول فایل hello.txt را تغییر دهید:
git switch main
echo "سلام از main" > hello.txt
git add . && git commit -m "تغییر از main"

# ۲. در شاخه دیگر همان خط را متفاوت تغییر دهید:
git switch -c feature-x
echo "سلام از feature" > hello.txt
git add . && git commit -m "تغییر از feature"

# ۳. برگردید به main و merge کنید:
git switch main
git merge feature-x

نتیجه — تعارض!

CONFLICT (add/add): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

وضعیت هنگام تعارض

git status
# On branch main
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#         both modified:   hello.txt

نشانه‌های تعارض در فایل

اگر فایل hello.txt را باز کنید، این را می‌بینید:

<<<<<<< HEAD
سلام از main
=======
سلام از feature
>>>>>>> feature-x
نشانهمعنی
<<<<<<< HEADشروع بخش تعارض — محتوای شاخه فعلی (main)
=======جداکننده دو نسخه
>>>>>>> feature-xپایان بخش — محتوای شاخه در حال ادغام

حل تعارض در ۴ قدم

  1. فایل را باز کنید و بخش تعارض را پیدا کنید (نشانه‌های <<<<<<<)
  2. تصمیم بگیرید: کدام نسخه درست است؟ یا ترکیبی از هر دو؟ محتوای نهایی را بنویسید و همه نشانه‌ها را حذف کنید
  3. فایل را stage کنید: git add hello.txt
  4. کامیت کنید: git commit (پیام پیش‌فرض merge آماده است)

مثلاً محتوای نهایی حل‌شده:

سلام از main و feature (ترکیب هر دو)

ابزارهای کمکی حل تعارض

ترفندهای پیشگیری از تعارض

خلاصه

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط