Какие методы разрешения конфликтов слияния в Git?

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

Ответ

Основные подходы к разрешению конфликтов:

1. Ручное разрешение (наиболее распространенный метод)

# После возникновения конфликта:
git status # Показывает конфликтующие файлы

# Редактируем файлы, убираем маркеры конфликта:
<<<<<<< HEAD
Ваши изменения
=======
Изменения из ветки feature
>>>>>>> feature

# После редактирования:
git add <файл>
git commit -m "Разрешил конфликт слияния"

2. Использование инструментов слияния

git mergetool # Запускает настроенный инструмент (vimdiff, kdiff3, etc.)
git config --global merge.tool vimdiff # Настройка инструмента

3. Принятие конкретной версии

# Принять свою версию (локальную):
git checkout --ours <файл>

# Принять чужую версию (удаленную):
git checkout --theirs <файл>

4. Отмена слияния

# Для merge:
git merge --abort

# Для rebase:
git rebase --abort

5. Стратегии автоматического разрешения

# Принять нашу версию при любых конфликтах:
git merge -X ours feature

# Принять их версию:
git merge -X theirs feature

6. Перебазирование с интерактивным разрешением

git rebase -i main
# Во время rebase для каждого конфликта:
git add <разрешенный-файл>
git rebase --continue

Практические советы:

  • Всегда проверяйте результат git diff после разрешения
  • Используйте git log --merge для просмотра коммитов, вызвавших конфликт
  • Для сложных конфликтов используйте git add -p для пошагового добавления изменений