آموزش git | حل تضاد (Conflict Resolution)

بررسی تضادها

وقتی چند نفر روی یک مخزن Git کار می‌کنند، ممکن است دو نفر همزمان یک بخش از یک فایل را تغییر دهند. در چنین حالتی، Git نمی‌تواند به‌طور خودکار تصمیم بگیرد که کدام تغییر باید حفظ شود. به این وضعیت «تضاد» یا Conflict گفته می‌شود. پیش از حل تضاد، ابتدا باید آن را بررسی و شناسایی کنیم تا بفهمیم دقیقاً چه اتفاقی افتاده است.

چه زمانی تضاد رخ می‌دهد؟

تضاد معمولاً در دو حالت اصلی به‌وجود می‌آید:

  • هنگام ادغام شاخه‌ها (Merge): وقتی می‌خواهید یک شاخه را در شاخه دیگر ادغام کنید و هر دو شاخه یک خط مشخص از یک فایل را به شکل متفاوتی تغییر داده باشند.
  • هنگام دریافت تغییرات از مخزن ابری (Pull): وقتی تغییرات دیگران را از مخزن ابری می‌گیرید و آن تغییرات با تغییرات محلی شما در یک فایل تداخل داشته باشند.

چگونه بفهمیم تضاد وجود دارد؟

بعد از اجرای دستور ادغام یا دریافت تغییرات، Git به شما پیام می‌دهد که تضاد رخ داده است. برای بررسی وضعیت دقیق، از دستور زیر استفاده می‌کنیم:

git status

این دستور فایل‌هایی که دچار تضاد شده‌اند را در بخشی به نام «Unmerged paths» نشان می‌دهد. همچنین برای دیدن خلاصه‌ای از تضادها می‌توانید از دستور زیر استفاده کنید:

git diff

ساختار نشانه‌گذاری تضاد در فایل

وقتی فایلی دچار تضاد می‌شود، Git داخل آن فایل نشانه‌هایی اضافه می‌کند تا مشخص شود کدام بخش مربوط به کدام نسخه است. این نشانه‌ها به شکل زیر هستند:

<<<<<<< HEAD
تغییرات نسخه فعلی (شاخه شما)
=======
تغییرات نسخه ورودی (شاخه دیگر)
>>>>>>> نام شاخه دیگر
  • بخش بین <<<<<<< HEAD و ======= مربوط به تغییرات نسخه فعلی شماست.
  • بخش بین ======= و >>>>>>> مربوط به تغییرات نسخه‌ای است که می‌خواهید ادغام کنید.

مشاهده فایل‌های دچار تضاد

برای دیدن محتوای یک فایل دچار تضاد، آن را باز کنید یا با دستور زیر آن را در ترمینال نمایش دهید:

cat نام_فایل

با این کار می‌توانید ببینید که Git کدام خطوط را به‌عنوان متناقض علامت‌گذاری کرده است. بررسی دقیق این نشانه‌ها به شما کمک می‌کند تصمیم بگیرید کدام تغییر را نگه دارید یا اینکه هر دو را ترکیب کنید.

شناسایی نوع تضاد

تضادها می‌توانند ساده یا پیچیده باشند:

  • تضاد ساده: فقط یک یا دو خط در یک فایل با هم تداخل دارند و انتخاب یکی از دو نسخه کافی است.
  • تضاد پیچیده: چند بخش از یک فایل یا چند فایل همزمان دچار تضاد شده‌اند و ممکن است نیاز به ترکیب دستی داشته باشند.

برای دیدن لیست کامل فایل‌های دچار تضاد می‌توانید از دستور زیر استفاده کنید:

git diff --name-only --diff-filter=U

این دستور فقط نام فایل‌هایی را نشان می‌دهد که در وضعیت «تضاد حل‌نشده» قرار دارند.

نکته مهم

بررسی تضادها اولین قدم برای حل آن‌هاست. تا زمانی که تضادها را بررسی نکرده باشید، نمی‌توانید تصمیم درستی برای حل آن‌ها بگیرید. پس از اینکه فهمیدید کدام فایل‌ها و کدام بخش‌ها دچار تضاد شده‌اند، می‌توانید وارد مرحله بعدی یعنی حل تضاد شوید.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2