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


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

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

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

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

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

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

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

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

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

    Заметка

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

    В этом примере выберите Pull, а затем Push, чтобы включить изменения, внесенные в удаленный репозиторий. Если при извлечении изменений или при попытке слияния двух ветвей возникают конфликты слияния, Visual Studio уведомляет вас об этом в окне Git Changes, в окне Git Repository и на всех файлах, содержащих конфликты.

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

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

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

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

    1. Просмотрите конфликтующие строки и решите, оставить ли правую или левую сторону, пометив флажками.

      -или-

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

      -или-

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

    снимок экрана, показывающий, как устранить конфликт слияния в Visual Studio 2022.

    Совет

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

    Скриншот параметров макета редактора слияния.

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

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

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

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

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

    снимок экрана о том, как создать объединяющий коммит с помощью окна изменений Git.

    Заметка

    Если вы хотите сохранить все изменения в файле, щелкните его правой кнопкой мыши в разделе Неслияные изменения и выберите СОХРАНИТЬ ТЕКУЩИЕ (ЛОКАЛЬНЫЕ), без открытия редактора слияния.

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

Совет

Дополнительные сведения о вариантах специальных возможностей, доступных для вас, см. в разделе сочетания клавиш Git советы и рекомендации по Visual Studio.

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

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