Найти тему
Властелин машин

Как c git диагностировать конфликтные изменения в проекте до их возникновения

Рассмотрим поведение Git, когда вы работаете с файлами проекта, в которые постоянно заливаются новые правки. Кроме того, расскажем как определить вносимые изменения до их мерджа и возникновения конфликтов.

Пусть у нас есть два репозитория, связанных с одним удаленным. Создадим в первом файл 1.txt и закоммитим его:

Создадим аналогичный файл 2.txt, добавим изменения в коммит и запушим все в удаленный репозиторий:

-2

Теперь перейдем в другой проект, добавим файл 1.txt с другим содержанием:

-3

Скачаем изменения с сервера:

-4

Чтобы посмотреть, какие нововведения вносятся коммитами удаленной ветки, воспользуйтесь командой git log (git log -p main..origin/main):

-5

git diff с аналогичным синтаксисом покажет все расхождения сразу (git diff main..origin/main):

-6

Теперь попытаемся внести новые изменения в локальную ветку:

-7

В 1.txt разрешим конфликт, оставив свою версию строки, а в файле 2.txt создадим тоже отличную от удаленной версию строки:

-8

После в первом репозитории внесем изменения в файл 2.txt и отправим их на сервер:

-9

Скачиваем обновления во втором репозитории:

-10

Смотрим на изменения:

с git log:

-11

с git diff:

-12

Пробуем смержить ветку:

-13

Как можно заметить, проблема только во втором файле, так как в первом конфликт мы уже разрешали и, несмотря на расхождения в снимках, изменения не затронут этот файл. Обратите внимание, что git diff (в отличие от git log) показывает все несоответствия, даже разрешенные ранее и не оказывающие влияния на процесс объединения.

Однако, если файл 1.txt будет изменен, придется опять разрешать конфликт:

-14

Посмотрим на нововведения во втором репозитории:

-15

Пробуем смерджить и сталкиваемся с проблемами в файле 1.txt:

-16

-17