Как c git диагностировать конфликтные изменения в проекте до их возникновения
Рассмотрим, поведение Git, когда вы работаете с файлами проекта, в которые постоянно заливаются новые правки. Кроме того, расскажем как определить вносимые изменения до их мерджа и возникновения конфликтов.
Пусть у нас есть два репозитория, связанных с одним удаленным. Создадим в первом файл 1.txt и закоммитим его:
Создадим аналогичный файл 2.txt, добавим изменения в коммит и запушим все в удаленный репозиторий:
Теперь перейдем в другой проект, добавим файл 1.txt с другим содержанием:
Чтобы посмотреть, какие изменения вносятся коммитами удаленной ветки, воспользуйтесь командой git log (git log -p main..origin/main):
git diff с аналогичным синтаксисом покажет все расхождения сразу (git diff main..origin/main):
Теперь попытаемся внести новые изменения в локальную ветку:
В 1.txt разрешим конфликт, оставив свою версию строки, а в файле 2.txt создадим тоже отличную от удаленной версию строки:
После в первом репозитории внесем изменения в файл 2.txt и отправим их на сервер:
Скачиваем обновления во втором репозитории:
Как можно заметить, проблема только во втором файле, так как в первом конфликт мы уже разрешали и, несмотря на расхождения в снимках, изменения не затронут этот файл. Обратите внимание, что git diff (в отличие от git log) показывает все несоответствия, даже разрешенные ранее и не оказывающие влияния на процесс объединения.
Однако, если файл 1.txt будет изменен, придется опять разрешать конфликт:
Посмотрим на нововведения во втором репозитории:
Пробуем смерджить и сталкиваемся с проблемами с файлом 1.txt: