Устранение конфликтов слияния#

Git предназначен для управления изменениями проекта, которые вносит распределенная команда. Иногда один и тот же блок кода редактируют сразу несколько разработчиков. Конфликт возникает, если:

  • один и тот же файл был изменен в двух ветках;

  • изменения затрагивают одни и те же строки или соседние участки;

  • Git не может однозначно выбрать правильный вариант.

Как Git сообщает о конфликте#

При попытке слияния Git выводит сообщение вида:

$ git merge feature/branch-name
> Auto-merging filename.sc
> CONFLICT (content): Merge conflict in user.sc
> Automatic merge failed; fix conflicts and then commit the result

Git помечает проблемные файлы как unmerged. Сами файлы содержат следующие маркеры конфликта:

  • <<<<<<< — начало текущей версии;

  • ======= — разделитель версий;

  • >>>>>>> — конец альтернативной версии.

Устранение конфликтов с помощью CLI#

  1. Выведите список конфликтных файлов:

    git status
    
  2. Опционально:

    • Чтобы посмотреть коммиты, участвующие в конфликте, выполните:

      git log --merge
      
    • Чтобы посмотреть различия между состояниями репозитория и рабочего дерева, выполните:

      git diff
      
  3. Откройте каждый конфликтный файл и выберите нужные изменения.

  4. После редактирования добавьте файл в индекс:

    git add filename.sc
    
  5. Зафиксируйте изменения:

    git commit -m "Resolve merge conflict"
    
  6. Merge-коммит будет создан автоматически и завершит операцию слияния.

Устранение конфликта через веб-интерфейс GitLab#

  1. Перейдите на страницу MR вашего проекта.

  2. Нажмите Resolve conflicts.

  3. Для каждого конфликта выберите способ разрешения:

    • Use source version — оставить изменения из ветки источника;

    • Use target version — оставить изменения из целевой ветки;

    • Edit manually — объединить изменения вручную, удаляя маркеры конфликта.

  4. После исправления всех конфликтов нажмите Mark as resolved для каждого файла.

  5. Когда все файлы будут помечены как разрешённые, нажмите Commit to source branch.

  6. После того, как MR обновится, нажмите Merge, чтобы завершить слияние.

Устранение конфликтов с помощью IntelliJ IDEA#

  1. Откройте окно Git.

  2. Откройте Merge Conflict Resolver одним из следующих способов:

    • В диалоге Conflicts выберите Merge.

    • В окне Local Changes выберите Resolve.

    • Выделите файл в редакторе и в главном меню выберите VCS > Git > Resolve Conflicts.

  3. Чтобы автоматически объединить неконфликтующие изменения, на панели инструментов выберите:

    • Apply Non-Conflicting Changes from the Left Side для объединения изменений из левой части диалога;

    • Apply Non-Conflicting Changes from the Right Side для объединения изменений из правой части диалога;

    • Apply All Non-Conflicting Changes, чтобы объединить изменения из обеих частей диалога.

  4. Для каждого конфликтного блока выберите действие для левой (локальной) и правой (репозиторной) версий:

    • выберите Accept, чтобы принять изменения;

    • выберите Ignore, чтобы отклонить изменения.

  5. При необходимости отредактируйте результирующий код вручную в центральной панели.

  6. Проверьте результат слияния в центральной панели и нажмите Apply.

Совет

Для простых конфликтов (например, если начало и конец одной строки были изменены в разных версиях файла) используйте кнопку Resolve Simple Conflicts, чтобы объединить изменения одним нажатием.