Как разрешать конфликтные ситуации в Git?

«Как разрешать конфликтные ситуации в Git?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При слиянии веток в Git конфликты возникают, когда изменения в одних и тех же строках были сделаны в разных ветках. Вот как я их разрешаю:

  1. Идентификация конфликта: Git помечает конфликтующие участки в файлах специальными маркерами:

    <<<<<<< HEAD
    Код из текущей ветки (например, main)
    =======
    Код из сливаемой ветки (например, feature-branch)
    >>>>>>> feature-branch
  2. Анализ и правка: Я открываю каждый конфликтный файл в редакторе, анализирую оба изменения и вручную редактирую итоговый код, удаляя маркеры Git. Часто это не просто выбор одного варианта, а их объединение.

  3. Завершение слияния: После правки всех файлов я добавляю их и создаю коммит слияния.

    git add <имя_файла>
    # или git add .
    git commit -m "Merge branch 'feature-branch' with conflict resolution"

Полезные инструменты и команды:

  • git status — показывает файлы с конфликтами.
  • git diff — помогает детально увидеть различия.
  • git mergetool — запускает визуальный инструмент для слияния (например, meld или vimdiff), что ускоряет работу со сложными конфликтами.
  • git checkout --ours/--theirs <файл> — позволяет быстро принять одну из версий целиком, если это уместно.

Ключевая практика — всегда запускать тесты после разрешения конфликта, чтобы убедиться, что объединённый код работает корректно.