При каких условиях команда git pull вызовет конфликт слияния?

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

Ответ

Конфликт слияния (merge conflict) при git pull возникает, когда вы и другой разработчик изменили одни и те же строки в одном и том же файле, и Git не может автоматически разрешить, какое изменение применить.

Типичный сценарий:

  1. Вы изменяете файл service.py в своей локальной ветке и делаете коммит.
  2. Тем временем другой разработчик изменяет те же строки в service.py в удалённой ветке (origin/main) и выполняет git push.
  3. Когда вы делаете git pull (что равносильно git fetch + git merge), Git обнаруживает конфликт.

Как выглядит конфликт:

$ git pull origin main
Auto-merging service.py
CONFLICT (content): Merge conflict in service.py
Automatic merge failed; fix conflicts and then commit the result.

Файл service.py будет содержать специальные маркеры:

def calculate():
<<<<<<< HEAD
    result = a + b  # Ваша локальная версия
=======
    result = a * b  # Версия из удалённого репозитория (origin/main)
>>>>>>> commit-hash-from-origin
    return result

Разрешение конфликта:

  1. Вручную отредактируйте файл, выбрав нужные изменения или скомбинировав их.
  2. Удалите маркеры <<<<<<<, ======= и >>>>>>>.
  3. Выполните git add service.py, чтобы отметить конфликт как разрешённый.
  4. Завершите слияние командой git commit.