Как решить Merge конфликт в Git

«Как решить Merge конфликт в Git» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Merge-конфликт возникает, когда Git не может автоматически объединить изменения из разных веток в одном файле. Вот мой алгоритм решения:

  1. Идентифицирую конфликтующие файлы. Git выведет сообщение Automatic merge failed; fix conflicts and then commit the result.. Команда git status покажет файлы в состоянии both modified.

  2. Открываю каждый такой файл. Конфликтующие блоки помечены специальными маркерами:

    <<<<<<< HEAD
    Код из текущей ветки (например, main или feature-branch)
    =======
    Код из ветки, которую пытаюсь смержить (например, origin/main)
    >>>>>>> branch-name
  3. Вручную редактирую файл, чтобы получить итоговую корректную версию. Удаляю маркеры <<<<<<<, =======, >>>>>>> и оставляю нужные строки кода, возможно, комбинируя изменения.

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

    git add <имя_файла_с_конфликтом>
    # или просто git add .
    git commit -m "Merge branch 'feature-x' and resolve conflicts"

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

  • git mergetool — запускает визуальный инструмент (например, meld, vimdiff, kdiff3), который удобнее для сложных конфликтов.
  • git diff — чтобы увидеть различия между конфликтующими версиями.
  • Стратегия предотвращения: Часто делаю git pull --rebase (или git rebase main в feature-ветке), чтобы переносить свои коммиты на актуальную основу, минимизируя конфликты в будущем мерже.