Перейти к основному содержимому

Как перебазировать изменения в среде разработки

Перебазирование (git rebase), наряду с командой слияния (git merge), является одним из основных способов переноса изменений из одной ветки в другую. Операция слияния фиксирует изменения, всегда двигаясь вперед по истории проекта, в то время как перебазирование позволяет переписать историю коммитов. С помощью команды перебазирования вы можете взять все коммиты из одной ветки и в том же порядке применить их поверх другой ветки, благодаря чему устраняются коммиты слияния и создается линейная история проекта.

Предположим, вы создали ветку dev для работы над какой-либо задачей и сделали в ней несколько коммитов (E и F). В это же время ваши коллеги уже завершили свои задачи и влили свои изменения (C и D) в основную ветку проекта main.

История проекта до перебазирования

Чтобы интегрировать изменения из ветки main в свою ветку, вы можете перебазировать вашу работу поверх main, как показано на рисунке ниже. В результате будут созданы новые коммиты E' и F', которые полностью идентичны коммитам E и F, отличается только хеш.

История проекта после перебазирования

Если посмотреть на историю перебазированной ветки, то можно увидеть, что она абсолютно линейна: будто все операции были выполнены последовательно, даже если изначально они совершались параллельно. После того как вы перебазировали ветку, вы можете влить ее в основную ветку проекта, используя слияние с перемоткой вперед. Таким образом вы избежите конфликтов слияния и получите идеальную линейную историю проекта.

В данной статье мы покажем, как выполнить перебазирование в среде разработки «1С:Шина». При групповой разработке пользоваться перебазированием следует с осторожностью, так как эта операция приводит к изменению истории коммитов в репозитории проекта. Если с веткой, для которой выполняется перебазирование, работают другие разработчики, это может нарушить их работу.

Перебазировать текущую ветку на выбранную ветку​

Чтобы выполнить перебазирование двух веток (например, перебазировать вашу текущую ветку dev на основную ветку проекта main), выполните следующие шаги:

  1. Нажмите на кнопку Синхронизация изменений, чтобы синхронизировать ваши изменения с изменениями в репозитории проекта.

    Нажатие кнопки «Синхронизация изменений»

    Вы можете пропустить этот шаг. В этом случае, если ваша ветка будет отличаться от ветки в репозитории проекта, появится всплывающее окно с просьбой выполнить синхронизацию изменений.

    Окно с рекомендацией выполнить синхронизацию изменений

  2. Нажмите правой кнопкой мыши на основную ветку проекта в группе Ветки и выберите Перебазировать текущую ветку на ветку в контекстном меню.

    Перебазирование текущей ветки на выбранную ветку

    Вы также можете перебазировать текущую ветку поверх определенного коммита в выбранной ветке. Для этого щелкните правой кнопкой мыши на требуемый коммит и выберите команду Перебазировать текущую ветку на коммит в контекстном меню.

    Перебазирование текущей ветки на коммит

    примечание

    Если разработка ведется с использованием задач, команды перебазирования также доступны в группе Задачи представления 1С.

    Перебазирование в группе «Задачи»

  3. Если процесс перебазирования завершится успешно, будет открыто диалоговое окно с предложением отправить изменения в репозиторий проекта. Нажмите ОК, чтобы перезаписать историю коммитов текущей ветки в удаленном репозитории.

    Окно отправки изменений в репозиторий

После перебазирования история коммитов в ветке dev будет выглядеть следующим образом:

История коммитов после перебазирования

Коммит ветки dev будет располагаться поверх коммита основной ветки main.

Разрешить конфликт слияния​

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

Информация о конфликте слияния в группе «Коммиты»

Если вы получили сообщение о конфликте, вы можете разрешить его следующими способами:

  • Продолжить перебазирование

    Разрешите конфликт в редакторе кода, зафиксируйте изменения и нажмите Продолжить перебазирование, чтобы завершить процесс перебазирования.

    Нажатие кнопки «Продолжить перебазирование» в группе «Коммит»

  • Отменить перебазирование

    Нажмите на стрелку рядом с кнопкой Продолжить перебазирование и выберите опцию Отменить перебазирование, чтобы вернуть текущую ветку к состоянию до использования команды перебазирования.

    Выбор опции «Отменить перебазирование»

  • Пропустить коммит с конфликтующими изменениями

    Нажмите на стрелку рядом с кнопкой Продолжить перебазирование и выберите опцию Пропустить коммит, чтобы исключить (удалить) конфликтный коммит из перебазирования.

    Выбор опции «Пропустить коммит»