از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
نحوه رفع تضادهای ادغام در Git
سرفصلهای مطلب
اگر تا به حال روی تیمی کار کردهاید که روی یک پایگاه کد بزرگ کار میکند، احتمالاً هنگام ایجاد یک درخواست کشش یا ادغام دو شاخه، تداخل ادغام را تجربه کردهاید.
حتی اگر هرگز با یک تیم یا روی یک پایگاه کد بزرگ کار نکردهاید، تا زمانی که بیش از یک شعبه داشته باشید، هنوز ممکن است تداخل ادغام داشته باشید. در فرآیند ادغام یک شاخه با شاخه دیگر، ممکن است تضاد ادغام رخ دهد.
در این مقاله، با تداخل های ادغام در Git و انواع تداخل های ادغام که ممکن است با آن مواجه شوید آشنا خواهید شد. مهمتر از همه، شما یاد خواهید گرفت که چگونه تضادهای ادغام را در GitHub و با ویرایشگر ادغام سه طرفه VS Code حل کنید.
آنچه را پوشش خواهیم داد
- تضاد ادغام در Git چیست؟
- در هنگام بروز تضادهای ادغام چه باید کرد
- انواع تضادهای ادغام در Git چیست؟
- تضاد ادغام محتوا
- تضاد ادغام ساختاری
- چگونه تضادهای ادغام را در Git حل کنیم
- نحوه حل تضادهای ادغام در Git با رابط GitHub
- نحوه حل تضادهای ادغام در Git با کد VS
- نحوه حل تضادهای ادغام در Git با ویرایشگر ادغام سه طرفه VS Code
- بسته بندی
تضاد ادغام در Git چیست؟
در Git، یک تضاد ادغام زمانی رخ می دهد که شما یا هر یک از اعضای تیمتان تغییرات متناقضی را در یک فایل از دو شاخه مختلف ایجاد کنید.
حتی اگر با اعضای تیم کار نمی کنید، تضادهای ادغام نیز ممکن است رخ دهد. اگر در یک فایل از شاخه های مختلف تغییراتی ایجاد کرده اید و تغییرات متناقض هستند، تداخل ادغام وجود خواهد داشت.
در بسیاری از موارد، Git به طور خودکار ادغام را برای شما انجام می دهد. اما اگر تغییرات متناقضی در همان فایل ایجاد می کنید، باید آنها را به صورت دستی حل کنید.
یک سناریوی نمونه از تضاد ادغام می تواند به شکل زیر باشد:
- تو شعبه کار میکنی
main
و مثلاً در خط 1 یک فایل mytext.txt تغییراتی ایجاد می کنیدHi world
. - شما به شعبه تغییر می کنید
new-feature
و شما تغییری در همان خط دو ایجاد می کنیدmytext.txt
، گفتنHello earth
.
اگر می خواهید شعبه را ادغام کنید new-feature
به main
، Git نمی تواند به طور خودکار تصمیم بگیرد که کدام یک را بپذیرد Hi world
و Hello earth
. بنابراین، Git یک خطای تضاد ادغام را ایجاد می کند و به شما می گوید که تضاد را به صورت دستی حل کنید.
در هنگام بروز تضادهای ادغام چه باید کرد
اگر در حین کار تضادهای ادغام رخ دهد، پایان دنیا نیست. Git فقط به شما می گوید “من می خواهم این ادغام را برای شما انجام دهم، اما یک کاری وجود دارد که باید ابتدا برای من انجام دهید”.
هنگامی که این تضادها رخ می دهد و شما سعی می کنید آنها را حل کنید، Git به طور خودکار خطوط متضاد را با علامت کوچکتر برای شما حاشیه نویسی می کند (<
علامت مساوی (=
و بزرگتر از نماد (>
) مثل این:
<<<<<<<
=======
>>>>>>>
همه چیز بین کمتر از (<
) و علائم مساوی (=
) تغییر در شاخه فعلی (شاخه ای که در حال ادغام با آن هستید) است. همه چیز بین برابر (=
) و بزرگتر از (>
) signs تغییر ورودی از شاخه ای است که می خواهید به شاخه دیگری ادغام کنید.
این به شما واگذار می شود که آن حاشیه نویسی ها را حذف کنید و تصمیم بگیرید که می خواهید خطوط متضاد چگونه باشند – می توانید یکی از تغییرات یا هر دوی آنها را بپذیرید.
بنابراین، بهجای اینکه به تضادهای ادغام بهعنوان یک مانع نگاه کنید، میتوانید آنها را فقط بهعنوان حاشیههایی که باید حذف کنید و چیزهایی که باید بپذیرید یا رد کنید ببینید.
به خواندن این مقاله ادامه دهید تا بتوانید نحوه حل تعارض ادغام را ببینید. اما قبل از آن، بیایید انواع تضادهای ادغام را بررسی کنیم.
انواع تضادهای ادغام در Git چیست؟
دو نوع تضاد ادغام وجود دارد. آن ها هستند تضاد محتوا و تضاد ساختاری.
تضاد ادغام محتوا
تضاد محتوا زمانی اتفاق میافتد که تغییراتی که در دو شاخه مختلف ایجاد میکنید روی خطوط کد یکسانی در یک فایل تأثیر بگذارد. این منجر به تغییرات متناقضی می شود که نمی توانند به طور خودکار توسط Git ادغام شوند.
به عنوان مثال، شما تغییر را ایجاد کنید display: flex
به خط 2 در یک شاخه و تغییر دیگری text-align: center
به همان خط 2 در همان فایل در یک شاخه دیگر.
زمانی که این تضاد محتوا اتفاق می افتد، Git روند ادغام را متوقف می کند و از شما می خواهد قبل از حرکت به جلو، تنظیماتی را در کد انجام دهید.
تضاد ادغام ساختاری
تضاد ساختاری زمانی اتفاق میافتد که تغییراتی که در دو شاخه مختلف ایجاد میکنید روی یک فایل تأثیر میگذارند اما خط به خط با یکدیگر تضاد ندارند. در عوض، تغییرات بر ساختار یا سازماندهی فایل تأثیر می گذارد، مانند تغییر نام یک متغیر، یا تابع، یا جابجایی یک بلوک از کد.
اگر این تضاد ساختاری اتفاق بیفتد، Git نمیتواند تعیین کند که کدام یک از تغییرات را بپذیرد و از شما میخواهد تصمیم بگیرید که کدام تغییرات را میخواهید.
چگونه تضادهای ادغام را در Git حل کنیم
برای اینکه به شما نشان دهم چگونه تضادهای ادغام را حل کنید، Git را در یک پوشه کاری (پوشه) با اجرا مقداردهی اولیه کردم git init
. من همچنین یک شعبه جدید ایجاد کرده ام new-feature
با دویدن git checkout -b new-feature
.
در حال دویدن git branch
نشان می دهد که من شعبه دارم main
و new-feature
:
من همچنین هر دو شاخه را به GitHub هل داده ام، بنابراین می توانم به شما نشان دهم که چگونه تضادهای ادغام را در GitHub حل کنید:
من مقداری کد به فایل های HTML و جاوا اسکریپت در دایرکتوری اضافه کرده ام. من چند درگیری را در دو فایل ایجاد کردم و برخی از تعهدات را انجام دادم:
نحوه حل تضادهای ادغام در Git با رابط GitHub
از آنجایی که من فشار داده ام new-feature
به GitHub شعبه کنید، GitHub از من می خواهد که یک درخواست کشش ایجاد کنم new-feature
شعبه به ادغام خواهد شد main
:
در این حالت، بلافاصله روی “مقایسه و کشیدن” کلیک کنید، خواهید دید که امکان ادغام خودکار وجود ندارد زیرا یک تضاد وجود دارد:
این به این معنی است که یک درگیری وجود دارد که باید حل کنید. درخواست کشش را ایجاد کنید و به پایین بروید تا ببینید کجا میتوانید تضاد را حل کنید، سپس روی دکمه «رفع تداخلها» کلیک کنید:
هنگامی که روی “رفع تداخل ها” کلیک می کنید، یک ویرایشگر دریافت می کنید و در سمت راست، لیست فایل هایی را خواهید دید که دارای تداخل هستند:
در ویرایشگر، خطوطی را می بینید که در آن تضادها رخ داده است:
می بینید که تغییرات در شاخه ورودی بین کمتر از (<
) و برابر با (=
) نشانه ها، در حالی که تغییرات در شاخه ای که می خواهید در آن ادغام شوید با بیش از () احاطه شده است.>
) و برابر با (=
) نشانه ها
خط مورد نظر خود را انتخاب کنید، حاشیه نویسی ها را بردارید و روی «علامت گذاری به عنوان حل شده» در گوشه بالا سمت راست کلیک کنید:
همین فرآیند را برای هر فایل دیگری که دارای تضاد(ها) است نیز تکرار کنید.
اگر بخواهید می توانید هر دو خط را نگه دارید. فقط مطمئن شوید که حاشیه نویسی را حذف کرده اید.
پس از انجام این کار، روی “Commit merge” در گوشه سمت راست بالا کلیک کنید:
اکنون، دیگر نباید تضاد ادغام وجود داشته باشد:
نحوه حل تضادهای ادغام در Git با کد VS
بسیاری از ویرایشگرهای کد محبوب دارای رابط هایی برای حل یک تضاد ادغام زمانی هستند که می خواهید به صورت محلی ادغام شوید.
هنگامی که به شاخه ای که می خواهید در آن ادغام شده و اجرا کنید جابجا می شوید git merge branch-to-merge
، از شما خواسته می شود تا برخی از درگیری ها را حل کنید (در صورت وجود). اگر تداخل هایی برای حل وجود داشته باشد، رابط در VS Code به این شکل است:
در این مرحله، اگر برای حل تضادها آماده نیستید، می توانید با اجرا کردن، ادغام را لغو کنید git merge --abort
.
اما اگر میخواهید تضادها را حل کنید، میتوانید تغییرات ورودی را بپذیرید، تغییر فعلی را بپذیرید یا هر دو تغییر را بپذیرید.
اگر یکی از این سه مورد را انتخاب کنید، تضاد(های) ادغام حل خواهد شد. پس از آن، فایل را اضافه کنید و آن را به روش معمول انجام دهید:
git add .
git commit -m "<commit message>"
نحوه حل تضادهای ادغام در Git با ویرایشگر ادغام سه طرفه VS Code
همچنین میتوانید تداخل را با ویرایشگر ادغام سهطرفه VS Code تغییر دهید.
بعد از دویدن git merge <branch-to-merge>
، روی دکمه “Resolve in Merge Editor” کلیک کنید
خواهید دید که اکنون 3 بازدید دارید. تغییرات شاخه ورودی را در سمت راست، تغییرات شاخه ای که می خواهید در آن ادغام شوید در سمت راست (شاخه فعلی) و پیش نمایش زیر این دو را مشاهده خواهید کرد:
اکنون با انتخاب هر یک از گزینه های موجود، شروع به حل تضادها کنید:
- پذیرش ورودی
- پذیرش ترکیب (ابتدا ورودی)
- فعلی را بپذیرید
- پذیرش ترکیب (اول فعلی)
ورودی تغییر در شاخهای است که میخواهید در شاخه هدف ادغام کنید، و فعلی تغییری است که قبلاً در شاخهای که میخواهید در آن ادغام شوید.
به هر فایل سوئیچ کنید، روی دکمه “Resolve in Merge Editor” کلیک کنید و هر یک از گزینه ها را در آنجا انتخاب کنید.
همچنین می توانید با وارد کردن کد مناسب در هر یک از فایل ها، تضادها را برطرف کنید.
هنگامی که راضی شدید، در هر ویرایشگر ادغام، روی “Complete Merge” کلیک کنید:
شما باید فایل ها را دوباره اضافه کنید و آنها را commit کنید:
git add .
git commit -m "<commit-message>"
خودشه! اگر میخواهید هنگام ادغام تداخلها، ویرایشگر ادغام سهطرفه بهطور خودکار باز شود، روی «تنظیمات» کلیک کنید و «ادغام ویرایشگر» را جستجو کنید، سپس «ویرایشگر ادغام را برای فایلهایی که در حال حاضر تحت تداخل هستند باز کنید» را علامت بزنید.
بسته بندی
همانطور که دیدید، داشتن تضاد Git آنقدرها هم که به نظر می رسد ترسناک نیست و حل آن کار غیرممکنی نیست. شما معمولاً می توانید آن را مستقیماً در GitHub یا در ویرایشگر متن خود حل کنید. ویرایشگر ادغام 3 طرفه VS Code نیز یک راه مناسب برای حل تعارض ادغام است.
اگر یک PR برای یک پایگاه کد بزرگ ایجاد کردهاید و با یک تضاد ادغام مواجه هستید، راه دیگری که میتوانید آن را حل کنید ممکن است با اجرای مجدد با main استفاده کنید. git pull --rebase upstream main
(به عنوان مورد ممکن است). پس از آن، یک رابط برای حل تداخل ها و فایل های حاوی تداخل ها به شما نمایش داده می شود. وقتی کارتان تمام شد، بدوید git add .
، git rebase --continue
، و سپس فشار را به شاخه خود فشار دهید.
منتشر شده در 1402-12-26 11:17:05