Поделиться через


Разрешение конфликтов слияния в Visual Studio

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

Предотвращение конфликт слияния

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

Устранение конфликтов слияния

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

    Снимок экрана: конфликт слияния после отправки.

  • Visual Studio обнаруживает, находится ли локальная ветвь, с которым вы работали, находится за ее ветвью удаленного отслеживания, а затем предоставляет варианты выбора.

    Снимок экрана: параметры, доступные в локальной ветви, находится за удаленной ветвью.

    Примечание.

    Если удаленный репозиторий поддерживает принудительное принудительное отправка, его можно включить с помощью Git> Параметры.

    В этом примере нажмите кнопку "Отправить", чтобы включить изменения, введенные в удаленный репозиторий. Если при извлечении изменений или попытке объединения двух ветвей есть какие-либо конфликт слияния, Visual Studio позволяет узнать в окне изменений Git, в окне репозитория Git и в любых файлах, которые имеют конфликты.

    Снимок экрана: уведомление конфликт слияния.

  • В окне изменений Git отображается список файлов с конфликтами в разделе "Отмена изменений". Чтобы начать разрешение конфликтов, дважды щелкните файл. Или если у вас есть файл с конфликтами, открытыми в редакторе, можно выбрать редактор "Открыть слияние".

    Снимок экрана: состояние конфликт слияния в окне изменений Git.

  • В редакторе слияния начните разрешать конфликт с помощью любого из следующих методов (как показано на нумерованном снимке экрана):

    1. Перейдите по строкам конфликтов и выберите между сохранением правой или левой стороны, выбрав проверка boxes.

      - или -

    2. Нажмите кнопку "Принять входящие " (или нажмите клавишу F10), чтобы принять все входящие изменения, или кнопку "Принять текущий " (или нажмите клавишу F11), чтобы сохранить текущую версию всех конфликтующих изменений. Вы можете сделать то же самое, выбрав один из проверка boxs в верхней части боковой рамки.

      - или -

    3. Вручную измените код в окне результатов .

    Снимок экрана: разрешение конфликт слияния в Visual Studio 2022.

    Совет

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

    Снимок экрана: параметры макета редактора слиянием.

    Например, на следующем снимка экрана показано, как выглядит вертикальное представление:

    Снимок экрана: вертикальное представление в пользовательском интерфейсе редактора слиянием.

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

    Снимок экрана: действие

  • Используйте окно изменений Git, чтобы создать фиксацию слияния и устранить конфликт.

    Снимок экрана: создание фиксации слияния с помощью окна изменений Git.

    Примечание.

    Если вы хотите сохранить все изменения в файле, щелкните его правой кнопкой мыши в разделе "Отменяемые изменения " и выберите "Сохранить текущий ( локальный) без необходимости открыть редактор слияния.

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

Настройка средства диффа

Если вы настроите .gitconfig файл на использование стороннего средства диффа, например BeyondCompare или KDiff3, Visual Studio уважает его. Каждый раз, когда Visual Studio обычно будет отображать дифф, отдельное окно открывается в выбранном инструменте. Пример см. в этом вопросе StackOverflow .