Конфликты
Конфликт слияния — 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-го слоя).