Применение изменений путем их перемещения из одной ветви в другую

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

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

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

  • Перебазируйте локальную ветвь
  • Принудительно отправить локальную ветвь после повторной базы
  • Интерактивная перебаза для локальных фиксаций скваша

Общие сведения о рабочем процессе Git см . в руководстве по Azure Repos Git.

Перебазируйте локальную ветвь

Git rebase интегрирует фиксации из исходной ветви в текущую локальную ветвь (целевая ветвь). Исходная ветвь остается неизменной. Для сравнения на следующей схеме показаны перебаза Git и другие типы слияний.

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

Git rebase resequences журнал фиксации целевой ветви, чтобы он содержал все фиксации исходной ветви, а затем все фиксации целевой ветви с момента последней общей фиксации. Другой способ просмотра заключается в том, что ребаза воспроизводит изменения в целевой ветви в верхней части журнала исходной ветви. В частности, Git перебазирует последовательность существующих фиксаций целевой ветви, что не относится к другим стратегиям слияния. На предыдущей схеме фиксация K содержит те же изменения, что и K, но имеет новую ИД фиксации, так как она ссылается обратно на фиксацию E вместо C.

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

Перебаза и слияние без быстрое перемещение вперед

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

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

Дополнительные сведения о повторной базе Git и ее использовании см. в разделе "Перебаза и слияние".

Перебазировать и принудительно отправить рекомендации

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

Git rebase и принудительная отправка являются мощными инструментами, но при выборе их использования следует учитывать следующие рекомендации:

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

Совет

Для совместной проверки используйте запрос на вытягивание, чтобы объединить новую работу в ветвь по умолчанию удаленного репозитория.

Как перебазировать

Visual Studio 2022 предоставляет интерфейс управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений. Visual Studio 2019 версии 16.8 также предлагает пользовательский интерфейс Team Обозреватель Git. Дополнительные сведения см. на вкладке Visual Studio 2019 — Team Обозреватель.

  1. Выберите "Управление ветвями Git > " , чтобы открыть окно репозитория Git.

    Снимок экрана: параметр

  2. В окне репозитория Git щелкните правой кнопкой мыши целевую ветвь и выберите "Проверить".

    Снимок экрана: параметр

  3. Щелкните правой кнопкой мыши исходную ветвь и выберите "Перебазировать целевую ветвь>" в <исходной ветви>.<

    Снимок экрана: параметр

  4. Visual Studio отобразит сообщение подтверждения после успешной перебазы.

    Снимок экрана: сообщение подтверждения повторной базы данных в окне репозитория Git Visual Studio.

    Если перебаза остановлена из-за конфликт слияния, Visual Studio уведомит вас. Можно либо устранить конфликты, либо отменить перебазу и вернуться в состояние предварительной базы.

    Снимок экрана: сообщение о конфликте повторной базы данных в окне репозитория Git Visual Studio.

Принудительно отправить локальную ветвь после повторной базы

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

Предупреждение

Никогда не принудительная отправка ветвь, над которыми работают другие. Дополнительные сведения см. в руководствах по повторной базе и принудительная отправка.

Чтобы принудительная отправка в Visual Studio, сначала необходимо включить параметр принудительная отправка:

  1. Перейдите в >раздел "Параметры>управления версиями>" Git Global Параметры.

  2. Выберите параметр "Включить push--force-with-lease".

Флаг push-отправки --force-with-lease Git безопаснее--force, чем флаг, так как он не перезаписывает удаленную ветвь с фиксациями, которые не интегрированы в локальную ветвь, принудительная отправка.

  1. В окне изменений Git нажмите кнопку, чтобы отправить фиксацию.

    Снимок экрана: кнопка

    Кроме того, вы можете выбрать "Отправить" в меню Git .

    Снимок экрана: параметр push-отправки из меню Git в Visual Studio.

  2. Если операция принудительной отправки Git по умолчанию завершается ошибкой, Visual Studio запускает диалоговое окно Git-Push сбоем. Нажмите кнопку принудительной отправки.

    Снимок экрана: диалоговое окно Git-push сбоем в Visual Studio.

  3. Visual Studio отобразит сообщение подтверждения после успешной отправки.

    Снимок экрана: сообщение подтверждения отправки в Visual Studio.

Интерактивная перебаза для локальных фиксаций скваша

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

Visual Studio 2022 не поддерживает интерактивную перебазирование. Вместо этого используйте командную строку Git.

Примечание.

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

Следующие шаги