Мой бизнес-кейс: мы трое тестировщиков, работающих над общей базой кода, хранящейся в ветке Main
.
На прошлой неделе я начал работу над новым тестом, создав функциональную ветку Main
.
Однако прежде чем я успел создать PR, двое других тестировщиков внесли свои изменения и были объединены в ветку Main
.
Теперь моя проблема в том, что моя ветка функций больше не синхронизирована с веткой Main
. Как мне получить последние изменения в функции из Main
?
Git fetch
или Git pull
не обновил мою ветку функций, а только обновил мою локальную основную ветку, но моя локальная ветка функций все еще не обновлена с учетом последних изменений по сравнению с основной.
Как мне перебазировать мою локальную ветку функций на последнюю копию основной ветки в INTELLIJ IDE Ultimate.
Я путаюсь при выборе ПРИНИМАТЬ МОИ ИЗМЕНЕНИЯ или ПРИНЯТЬ ИХ ИЗМЕНЕНИЯ. Я при этом испортил свою ветку....
Как обновить ветку функций из последней копии master без потери локальных изменений.
Пожалуйста, направь меня
Пошаговые инструкции:
Перейдите к VCS > Git > Fetch
, чтобы получить последние изменения из удаленного репозитория.
Выберите свою ветвь функции и выберите «Оформить заказ».
Перебазируйте свою ветку функций на последнюю основную ветку
Перейдите к VCS > Git > Rebase
.
Выберите Перебазировать текущую ветку на....
В появившемся диалоговом окне выберите основную ветку (например, origin/main) в качестве целевой и нажмите «Перебазировать».
Разрешение конфликтов (если есть конфликты)
Для каждого конфликта используйте средство просмотра различий, предоставляемое IntelliJ IDEA:
Принять ваши (Принять мои изменения): сохраняет ваши изменения и отбрасывает входящие изменения из основной ветки.
Принять их (Принять их изменение): сохраняет изменения из основной ветки и отменяет ваши изменения.
Объединить: позволяет вручную объединить изменения, отредактировав файл. После разрешения каждого конфликта отметьте файл как разрешенный, нажав кнопку «Отметить как разрешенный» в правом верхнем углу средства просмотра различий.
После разрешения всех конфликтов продолжите процесс перебазирования.
перейдите к VCS > Git > Rebase
, затем выберите «Продолжить перебазирование».
После успешного перебазирования и разрешения конфликтов отправьте свою ветку функций в удаленный репозиторий.
Переходите на VCS > Git > Push
.
В диалоговом окне «Push» обязательно отправьте свою ветку функции.
Используйте опцию --force-with-lease
, чтобы не перезаписать изменения, которые могли быть внесены другими.
Рекомендуется использовать Расширение конфликта слияния запроса на включение для разрешения конфликтов слияния в запросе на включение:
Установите расширение конфликта слияния запросов на включение в свою организацию/коллекцию Azure DevOps.
После того как вы зафиксируете и отправите изменения в удаленную ветку feature
в Azure DevOps, создайте PR (запрос на извлечение), чтобы объединить изменения из feature
в main
.
Если определенные файлы были изменены с обеих сторон (feature
и main
), в Обзоре PR вы увидите сообщение об ошибке «merge conflicts
» и список конфликтующих файлов. В этой ситуации невозможно завершить слияние PR.
Перейдите на вкладку «Конфликты», чтобы вручную разрешить конфликты в каждом файле.
feature
, выберите опцию «Keep Whole Source (left) File
».main
, выберите опцию «Keep Whole Target (right) File
».Submit Merge
», чтобы отправить измененное содержимое.После разрешения конфликтов во всех файлах перейдите в раздел «Обзор», вы увидите, что ошибка «merge conflicts
» исчезла и появилось сообщение «No merge conflicts
». На этом этапе вы можете завершить слияние PR как обычно.
Переменная в потоке, которой вы должны следовать, заключается в том, что мы не знаем, что такое восходящая ветвь вашей функциональной ветки. Восходящая ветвь — это то, что будет использоваться в качестве ветки для перебазирования, если вы запустите, скажем,
git pull -r
.... поэтому, чтобы избежать использования неправильного восходящего потока и предположения, что ваш локальныйmain
btanch уже обновлен, вы можете запустить уже работают над вашей функциональной веткой).