Какие способы решения конфликтов слияния в Git ты знаешь?

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

Ответ

В Git есть несколько основных подходов к разрешению конфликтов слияния (merge) или перебазирования (rebase):

  1. Ручное редактирование файла. Открываешь файл с конфликтами, видишь маркеры:

    <<<<<<< HEAD (или название ветки)
    Ваши локальные изменения
    =======
    Вливаемые изменения из другой ветки
    >>>>>>> branch-name

    Вручную редактируешь, оставляя нужный код, удаляешь маркеры и сохраняешь файл.

  2. Использование команды git checkout для выбора версии. Можно принять одну из сторон конфликта целиком:

    # Принять свою версию (ветка, В КОТОРУЮ мержим)
    git checkout --ours конфликтующий_файл.js
    # Принять чужую версию (ветку, КОТОРУЮ мержим)
    git checkout --theirs конфликтующий_файл.js

    После этого нужно выполнить git add для файла.

  3. Использование инструментов слияния. Команда git mergetool запускает визуальный инструмент (например, Meld, KDiff3, vimdiff), который упрощает сравнение и выбор изменений.

Стандартный процесс после возникновения конфликта:

git merge feature-branch  # Возникает конфликт
# ... разрешаешь конфликты любым из способов выше ...
git add .  # или конкретные файлы
git commit  # создается коммит слияния с разрешением конфликтов
# Или, если это rebase:
git rebase --continue

Важно: При использовании git rebase --skip конфликтующий коммит будет пропущен, что может привести к потере изменений. Эту команду нужно использовать с осторожностью и полным пониманием последствий.