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

Как разрешить конфликтующие изменения в среде разработки

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

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

Сообщение о конфликте слияния

Вы можете разрешить этот конфликт следующим образом:

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

  2. Нажмите на кнопку Синхронизировать изменения, чтобы получить с сервера измененные данные проекта.

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

    В выпадающем меню раздела Коммит нажмите Объединить.

    Выбор пункта «Объединить ветвь» в меню группы «Коммит»

  3. Выберите ветвь проекта, которую хотите слить с текущей веткой.

    Выбор ветки для слияния

  4. Введите сообщение коммита слияния.

    Ввод сообщения коммита слияния

  5. После этого в разделе Изменения слияния вы увидите файлы, содержащие конфликты. Они будут отмечены значком К (Конфликт).

    Конфликтующие файлы в группе «Коммит»

    В самом файле конфликт слияния будет обозначен следующим образом:

    Информация о конфликте слияния внутри файла

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

  6. После разрешения всех конфликтов проиндексируйте сделанные изменения и нажмите кнопку Завершить слияние и отправить.

    Нажатие кнопки «Завершить слияние и отправить»

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

    Окно с просьбой добавить конфликтующие файлы в индекс коммита

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

    Окно синхронизации изменений с репозиторием

Файловый редактор трехстороннего слияния

Для сложных конфликтов или детального сравнения изменений используйте файловый редактор трехстороннего слияния. Редактор состоит из 4 окон:

  • Входящее — отображает изменения из сливаемой ветки.

  • Текущее — текущая локальная версия.

  • База (отображается опционально) — исходное состояние файла.

  • Результат — итоговый вид файла с принятыми изменениями.

    Редактор слияния

Открытие редактора

Для открытия редактора воспользуйтесь одним из способов:

  • Нажмите кнопку Разрешить в редакторе слияния в правом нижнем углу открытого редактора:

    Кнопка «Разрешить в редакторе слияния»

  • Воспользуйтесь контекстным меню:

    Контекстное меню «Разрешить в редакторе слияния»

Разрешение конфликтов

  1. Проанализируйте различия во всех 4 окнах:

    • сравните изменения с исходным файлом (окно База),
    • оцените различия между входящей и текущей версиями.
  2. Используйте кнопки принятия изменений над областью конфликта:

    • Принять входящее — использовать изменение из сливаемой ветки,

    • Принять текущее — сохранить вашу локальную версию,

    • Пометить как обработанный — сохранить текущее состояние результата.

      Редактор слияния

  3. В окне Результат отображается текущее состояние файла в зависимости от принятых изменений. В нем вы можете отменить принятые изменения или внести изменения вручную.

    Окно «Результат»

  4. В правом верхнем углу окна Результат отображается счетчик оставшихся конфликтов, а также кнопка Сброс, которая отменяет принятые изменения.

    Окно «Результат»

  5. После разрешения всех конфликтов нажмите кнопку Завершить слияние.

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

Нажмите троеточие ... в правом верхнем углу, чтобы изменить внешний вид редактора:

  • скрыть окно База,

  • изменить отображение окон.

    Меню «Дополнительные действия»

Отменить слияние

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

  • Кликните на стрелку рядом с кнопкой Завершить слияние и отправить и нажмите Отменить слияние.

    Выбор опции «Отменить слияние»

  • Щелкните на имя текущей ветки в панели состояния и выберите команду Отменить слияние в открывшемся меню.

    Выбор команды «Отменить слияние» в панели команд