Карта / Git / Конфликты

Конфликты

Конфликт слияния — Git не может сам решить, чья версия строки правильная. Случается, когда две ветки поменяли одни и те же строки файла по-разному:

<<<<<<< HEAD
int max = 100;
=======
int max = 200;
>>>>>>> feature/login

Git вставляет в файл обе версии с маркерами и просит человека решить вручную. Нужно убрать маркеры и оставить правильный код:

int max = 200;   // выбрали версию из feature/login, маркеры удалили

После исправления:

git add file.java         # пометить конфликт как решённый
git commit                # завершить merge
Копнуть глубже

Почему конфликты возникают не всегда, а только иногда. Git сам успешно сливает изменения, если они в разных местах файла (или в разных файлах) — конфликт случается только когда обе ветки тронули одни и те же строки. Поэтому маленькие, частые коммиты и редкая синхронизация с main снижают шанс конфликта — чем дольше ветка живёт отдельно, тем больше расхождений накапливается.

IDE сильно упрощают разрешение конфликтов — IntelliJ показывает конфликт в визуальном виде “слева твоя версия, справа чужая”, с кнопками “взять эту”, “взять обе” — вручную редактировать маркеры <<<<<<< нужно редко.

🎤 Закрыл тему, если можешь объяснить:
• что такое конфликт слияния и как его разрешить вручную;
• почему конфликты возникают не всегда, а только при пересечении изменений (если дошёл до 2-го слоя).