Обновление кода с помощью извлечения, слияния и извлечения
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018
Visual Studio 2019 | Visual Studio 2022
При наличии нескольких участников проекта оставьте локальный репозиторий Git обновленным, скачав и интегрировав работу, отправленную другими пользователями в удаленный репозиторий проекта. Эти команды Git обновляют локальный репозиторий:
- Git извлекает все новые фиксации, отправленные другими пользователями в удаленный репозиторий. Ветви удаленного отслеживания в локальном кэше репозитория обновляются. Локальные ветви остаются неизменными.
- Слияние Git интегрирует фиксации из одной или нескольких исходных ветвей в целевую ветвь.
- Git rebase интегрирует фиксации из исходной ветви в целевую ветвь, но использует стратегию, отличную от стратегии слияния Git.
- Git pull выполняет выборку, а затем слияние или повторную базу для интеграции фиксаций в текущую локальную ветвь.
Visual Studio использует подмножество этих команд Git при синхронизации локального репозитория с удаленным репозиторием.
Общие сведения о рабочем процессе Git см. в Azure Repos руководстве по Git.
В этой статье приведены процедуры для следующих задач:
- Скачивание изменений с помощью выборки
- Обновление ветвей с помощью слияния или повторной базы
- Скачивание изменений и обновление ветвей с помощью запроса
Скачивание изменений с помощью выборки
Git получает скачивание фиксаций удаленной ветви и ссылается на объекты файлов, которые не существуют в локальном репозитории, и обновляет ветви удаленного отслеживания в локальном кэше репозитория. Ветви удаленного отслеживания являются локально кэшируемыми копиями удаленных ветвей только для чтения и не являются локальными ветвями. Выборка Git не обновляет локальные ветви. Например, если удаленный репозиторий, назначенный origin
ветвью bugfix3
, Git будет обновлять ветвь удаленного отслеживания, а origin/bugfix3
не локальную bugfix3
ветвь. Ветви удаленного отслеживания можно использовать для:
- Сравните ветвь удаленного отслеживания с локальной ветвью для просмотра внесенных изменений.
- Объедините ветвь удаленного отслеживания в локальную ветвь.
- Создайте локальную ветвь из ветви удаленного отслеживания.
- Visual Studio 2022
- Visual Studio 2019 — меню Git
- Visual Studio 2019 — Team Explorer
- Командная строка Git
Visual Studio 2022 предоставляет возможности управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений. Visual Studio 2019 версии 16.8 также предлагает пользовательский интерфейс Team Explorer Git. Дополнительные сведения см. на вкладке Visual Studio 2019 — Team Explorer .
В окне "Изменения Git" выберите "Выборка". Затем выберите исходящие и входящие , чтобы открыть окно репозитория Git .
Вы также можете выбрать выборку из меню Git.
В окне репозитория Git в разделе " Входящие " отображаются фиксации. Выберите выбранную фиксацию, чтобы просмотреть список измененных файлов в этой фиксации. Выберите измененный файл, чтобы просмотреть представление измененного содержимого.
Совет
Выборка не удаляет ветви удаленного отслеживания в локальном кэше репозитория, у которых больше нет удаленного аналога. Чтобы настроить Visual Studio для очистки устаревших ветвей удаленного отслеживания во время выборки, выполните указанные ниже действия.
- Выбор параметров средств>>управления версиями>Git Global Settings.
- Задайте для удаленных ветвей Prune во время выборки значение
True
.
После получения Git можно сравнить локальную ветвь с соответствующей ветвью удаленного отслеживания, чтобы узнать, что изменилось в удаленной ветви. Если вы решили обновить текущую локальную ветвь с помощью внесенных изменений, можно выполнить слияние или перебазу Git. Вы также можете запустить Git pull, который объединяет выборку Git с слиянием Git или повторной базой данных. Слияние Git и перебаза Git обновляют целевую ветвь, применяя фиксации из исходной ветви к ней. Однако слияние Git и перебаза Git используют различные стратегии. Дополнительные сведения см. в разделе "Обновление ветвей с слиянием или повторной базой данных", а также "Когда следует перебазировать" и "Слияние".
Обновление ветвей с помощью слияния или повторной базы
Слияние Git и ребаза Git интегрируют фиксации из исходной ветви в текущую локальную ветвь (целевая ветвь). Слияние Git выполняет либо быстрый переадресацию, либо слияние без быстрого переадресации. Слияние без быстрого переадресации также называется трехсторонным слиянием или истинным слиянием. Перебаза Git — это еще один тип слияния. Эти типы слияния показаны на следующей схеме.
Слияние Git и перебаза Git широко используются в рабочем процессе Git. При работе с локальной функцией или ветвью исправлений часто рекомендуется:
main
Сохраняйте локальную ветвь в актуальном состоянии с удаленным аналогом, периодически извлекая и объединяя удаленные фиксации.- Интеграция обновлений локальной
main
ветви в локальную ветвь компонентов с помощью повторной базы или слияния. - Создайте резервную копию своей работы в локальной ветви компонентов, перенастроив ее в соответствующую удаленную ветвь.
- После завершения функции создайте запрос на вытягивание , чтобы объединить удаленную ветвь компонентов в удаленную
main
ветвь.
Этот подход поможет вам:
- Следите за недавними работами других пользователей, которые могут повлиять на вашу работу.
- Оперативно устраните любые конфликты между вашей работой и другими.
- Примените новую функцию к актуальному содержимому проекта.
- Получите проверку запроса на вытягивание вашей работы.
Объединить
Для слияния Git, если подсказка целевой ветви существует в исходной ветви, тип слияния по умолчанию будет быстрым слиянием. В противном случае тип слияния по умолчанию не будет быстрым слиянием.
Быстрое слияние Git никогда не может иметь конфликт слияния, так как Git не будет применять быстрое слияние, если чаевые целевой ветви расходились от исходной ветви. По умолчанию Git по возможности использует быстрое слияние. Например, Git будет применять быстрое слияние в локальной ветви, которую вы обновляете только путем извлечения из удаленной ветви-аналога.
Слияние Git без быстрого переадресации создает новую целевую ветвь "merge commit", которая интегрирует изменения исходной ветви с изменениями целевой ветви. Применимые изменения — это изменения, внесенные после последней фиксации, которая является общей для обеих ветвей. На предыдущей схеме фиксация C является последней общей фиксацией в обеих ветвях. Если любое изменение исходной ветви конфликтует с любым изменением целевой ветви, Git предложит устранить конфликт слияния. Фиксация слияния (L) содержит изменения интегрированной исходной ветви и целевой ветви. Подсказки исходной и целевой ветви (K и E) являются родителями фиксации слияния. В журнале фиксаций ветви фиксация слияния является полезным маркером для операции слияния и четко показывает, какие ветви были объединены.
Слияние Git изменяет только целевую ветвь— исходная ветвь остается неизменной. При возникновении одного или нескольких конфликтов слияния их необходимо разрешить для завершения слияния. Кроме того, можно отменить операцию слияния и вернуть целевую ветвь в предыдущее состояние.
Дополнительные сведения о вариантах слияния и стратегиях см. в справочном руководстве по Git и стратегиях слияния Git.
Совет
Если исходная ветвь является ветвью удаленного отслеживания, убедитесь, что ветвь обновлена, запустив получение Git перед слиянием.
- Visual Studio 2022
- Visual Studio 2019 — меню Git
- Visual Studio 2019 — Team Explorer
- Командная строка Git
Выберите "Управление ветвями Git>" в строке меню, чтобы открыть окно репозитория Git.
В окне репозитория Git щелкните правой кнопкой мыши целевую ветвь и выберите "Извлечь".
Щелкните правой кнопкой мыши исходную ветвь и выберите "Объединить <исходную ветвь" в <целевую ветвь>>.
Visual Studio отобразит сообщение с подтверждением после успешного слияния.
Если слияние остановлено из-за конфликтов слиянием, Visual Studio уведомит вас. Можно либо устранить конфликты, либо отменить слияние и вернуться в состояние перед слиянием.
Rebase
Git rebase перебазирует журнал фиксаций целевой ветви, чтобы он содержал все фиксации исходной ветви, а затем все фиксации целевой ветви с момента последней общей фиксации. Другой способ просмотра заключается в том, что база Git повторно воспроизводит изменения в целевой ветви поверх журнала исходной ветви. Если любое изменение исходной ветви конфликтует с любым изменением целевой ветви, Git предложит устранить конфликт слияния. Git rebase не создает фиксацию слияния. В частности, Git изменяет последовательность существующих фиксаций целевой ветви, что не относится к другим стратегиям слияния. На предыдущей схеме фиксация K' содержит те же изменения, что и K, но имеет новый идентификатор фиксации, так как он ссылается обратно на фиксацию E вместо C.
Git перебазирует только целевую ветвь— исходная ветвь остается неизменной. При возникновении одного или нескольких конфликтов слияния их необходимо разрешить для завершения повторной базы. Кроме того, можно отменить операцию перебазы и вернуть целевую ветвь в предыдущее состояние.
Если вы единственный пользователь, работающий над функцией или ветвью исправлений, рассмотрите возможность использования повторной базы Git для интеграции в нее фиксаций новых main
ветвей. В противном случае используйте слияние Git. Дополнительные сведения о повторной базе Git и ее использовании см. в статье "Применение изменений с повторной базой и повторной базой данных и слиянием".
Совет
Если исходная ветвь является ветвью удаленного отслеживания, убедитесь, что ветвь обновлена, запустив получение Git перед повторной базой данных.
- Visual Studio 2022
- Visual Studio 2019 — меню Git
- Visual Studio 2019 — Team Explorer
- Командная строка Git
Выберите "Управление ветвями Git>", чтобы открыть окно репозитория Git.
В окне репозитория Git щелкните правой кнопкой мыши целевую ветвь и выберите "Извлечь".
Щелкните правой кнопкой мыши исходную ветвь и выберите "Перебазировать <целевую ветвь" на <исходную ветвь>>.
Visual Studio отобразит сообщение с подтверждением после успешной перебазы.
Если перебаза остановлена из-за конфликтов слияния, Visual Studio уведомит вас. Можно либо устранить конфликты, либо отменить перебазу и вернуться к состоянию перед повторной базой.
Скачивание изменений и обновление ветвей с помощью запроса
По умолчанию Git pull объединяет выборку Git и слияние Git для обновления текущей локальной ветви от удаленного аналога. При необходимости вытягивание Git может выполнять перебазу Git вместо слияния Git.
В отличие от получения Git, вытягивание Git обновит текущую локальную ветвь сразу после скачивания новых фиксаций из удаленного репозитория. Используйте Git pull, если вы знаете, что хотите обновить текущую локальную ветвь сразу после получения Git.
Совет
Чтобы настроить Visual Studio для перебазирования вместо слияния при вытягивании:
- В меню Git перейдите к разделу ">Параметры> управленияверсиями>" Git Global Settings.
- Задайте локальную ветвь Rebase при извлечении параметра
True
.
- Visual Studio 2022
- Visual Studio 2019 — меню Git
- Visual Studio 2019 — Team Explorer
- Командная строка Git
В окне "Изменения Git" нажмите кнопку "Вытягивание".
Вы также можете выбрать "Вытягивание " в меню Git.
Сообщение с подтверждением отображается после завершения операции извлечения.
Если во время операции слияния возникают конфликты, Visual Studio уведомит вас. Можно либо устранить конфликты, либо отменить слияние и вернуться в состояние перед слиянием.
Примечание
В Visual Studio sync выполняет вытягивание , а затем push-уведомления для синхронизации локальной и удаленной ветви. Дополнительные сведения о синхронизации см. в статье Использование извлечения, извлечения, отправки и синхронизации git для управления версиями в Visual Studio.