• DevOps
  • Защита информации
  • ИТ-поддержка
  • Разрешение конфликтов при слиянии веток в git

    Слияние веток Git является основным процессом при работе у разработчиков. Бывает так, что разработчики в своих разных ветках изменяют один и тот же файл, а также одно и тоже место.

    Git может автоматически объединить файлы, если они были изменены в разных местах и на разных строках.

    Но, если Git не справился автоматически, то придется исправлять конфликты вручную.

    Для этого рассмотрим несколько конфликтов при слиянии.

    Игнорировать конфликт

    Если не готовы заниматься решением конфликтов, то можно ввести:

    $ git merge --abort

    Эта команда попытается откатить состояние до того, что было до запуска слияния.

    Конфликт, решаемый последним действием

    Предположим, что пришлось делать слияние из ветки feature в ветку develop. Мы переключаемся в ветку feature и выполняем следующую команду.

    $ git merge develop
    Auto-merging test.conf
    CONFLICT (content): Merge conflict in test.conf
    Automatic merge failed; fix conflicts and then commit the result.
    

    Если мы откроем файл на который ссылается ошибка “test.conf”, то можем увидеть следующий текст:

    $ cat test.conf
    <<<<<<< HEAD
    Version5 - Изменение для branch feature
    
    =======
    Version4.1 - Ветка branch develop
    >>>>>>> develop
    
    

    Можем посмотреть git log каждой ветки и выбрать последнее по времени изменение в наших ветках.

    $ git log --oneline --left-right HEAD...MERGE_HEAD
    > f099a6c (develop) New version 4.1
    < f054b69 (HEAD -> feature/new-site) New version in feature
    < f4cb127 Add text for feature
    < c5e28e9 (gitlab/feature/new-site) New file static site
    

    Это список коммитов, которые были включены в слияние, с указанием также ветки разработки, в которой находится каждый коммит.

    Смотрим изменения, которые происходили в коммите:

    $ git show f099a6c
     New version 4.1
    diff --git a/test.conf b/test.conf
    index 2937fe3..d4867e4 100644
    --- a/test.conf
    +++ b/test.conf
    @@ -1 +1 @@
    -Version4 - Ветка branch develop
    +Version4.1 - Ветка branch develop
    

    Видим последние изменения и меняем файл test.conf по последнему коммиту.

    После того, как изменили файл по актуальным изменениям, можно продолжить слияние веток без конфликтов:

    $ git merge develop
    Already up to date.

    Нужна помощь? Настройки и обслуживание git мы осуществляем в рамках услуги DevOps-аутсорсинг. Также возможны разовые проектные работы.

    Не нашли ответа на свой вопрос?
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных