Короткий ответ
Конфликт возникает, когда Git не может автоматически объединить изменения в одном и том же участке файла из двух веток; разрешение — открыть файл, выбрать нужные строки между маркерами <<<<<<</=======/>>>>>>>, убрать маркеры, протестировать результат и закоммитить его.
Как это работает подробнее
при merge/rebase Git построчно сравнивает версии файла относительно общего предка; если один и тот же диапазон строк изменён в обеих ветках по-разному, автоматическое слияние невозможно, и Git вставляет конфликтные маркеры.
Пример кода
Пример конфигурации
<<<<<<< HEAD
def get_discount(user):
return 0.1 if user.is_premium else 0
=======
def get_discount(user):
return 0.15 if user.is_premium else 0.05
>>>>>>> feature/discountsЧто использовать на практике
- Рекомендация. нужно открыть файл, понять смысл обеих версий, собрать корректный итоговый код, удалить все маркеры, прогнать тесты/линтер, затем
git add &lt;file&gt;иgit commit(для merge) илиgit rebase --continue.git statusподсказывает, какие файлы ещё в конфликте.
Подводные камни
- Риск. закоммитить файл, не удалив маркеры конфликта; слепо брать «свою» или «чужую» версию через
git checkout --ours/--theirsбез проверки смысла; не запускать тесты после разрешения.