Git мастер и разработка не синхронизированы - PullRequest
0 голосов
/ 06 июня 2019

У меня есть мастер и ветка разработки.Основные (серверные) репозитории размещаются в Azure Devops (в помещении).Я сделал два Pull Requests (из функциональных веток в разработку) для изменений в моей ветке разработки.

PR1: feature-branch-1 -> разработка

PR2: feature-branch-2 -> разработка

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

PR3: разработка -> мастер

Теперь говорится, что моя ветка разработки "1 позади, а 2 впереди мастера"

Сравнение разработки с мастером показывает мои две функции "Запросы на извлечение".Сравнение мастера с разработкой показывает мой PR слияния для синхронизации ветвей.

Что в моем процессе я сделал неправильно, и как я могу это исправить - получить их в синхронизации?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Теперь говорится, что моя ветвь разработки "1 позади, а 2 впереди мастера"

Сравнение разработки с мастером показывает мои две функции "Запросы на извлечение".Сравнение мастера с разработкой показывает мой PR слияния для синхронизации ветвей.

Нет ошибок в вашей операции, и ответ (1 behind and 2 ahead of master) также является правильным.

Прежде всего, вынужно знать, что означает " Squash Merge ".

Давайте назовем эти коммиты: коммит слияния от feature-branch-1 до Разработка равна A .Фиксация от feature-branch-2 до Development равна B .Фиксация слияния, созданная из Development в Master - C .

При выполнении объединения feature-branch-1 вРазработка с Squash Merge, создаст новый коммит A '.На самом деле, сравните с их содержанием, между А и А нет никакой разницы.Но сама ветвь функции не имеет коммита, объединяющего ее с веткой по умолчанию.enter image description here

Итак, следуйте этой логике.Пока вы выполняете Merge Development до Master, он создаст один новый коммит C '.После слияния в ветке Master добавляется только один новый коммит C ', а не C .Вот почему вы получаете отставание впереди как 1 behind and 2 ahead of master.

Измените ветку сравнения на Разработка , вы увидите, что позади | впереди вашего feature-branch-1 и feature-branch-2 равен 2 | 1 .Это все из-за Squash Merge .

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

Но если вы хотите синхронизировать их с историей, измените тип слияния на Basic Merge .

1 голос
/ 06 июня 2019

Вы сделали правильный процесс, но в зависимости от того, что вы выбрали, произошло одно из следующих действий:

  • Когда вы выполнили слияние с PR, вы выбрали «Слияние», которое создаст коммит слияния.на целевой (основной) ветке.Таким образом, Мастер на 1 опережает развитие.
  • Когда вы выполнили PR-слияние, вы выбрали «Сквош», и в этом случае он создаст новый коммит с изменениями в целевой (основной) ветке.Этот Мастер на 1 коммит впереди разработки и на 2 коммита позади.
  • Когда вы выполняли быструю перемотку вперед, если слияние не требовалось, целевая и исходная ветви теперь были бы одинаковыми.И никакой коммит слияния не будет добавлен.
  • Когда вы перебазируете разработку на мастер, все изменения будут воспроизведены в ветке master и затем зафиксированы.В этом случае вам придется принудительно запускать разработку.

Чтобы убедиться, что разработка снова синхронизирована с мастером, у вас есть несколько вариантов:

  • Слить мастер обратноразвивать.Развитие будет на 1 коммит слияния впереди мастера позже.
  • Перебазируйте разработку на мастера и форсируйте пуш.Разработка будет такой же, как и у мастера + любые выдающиеся изменения будут воспроизведены поверх разработки.
  • Сбросить настройки до мастерства и принудительного толчка.Проявление будет таким же, как у мастера + все оставшиеся изменения будут потеряны.
  • Удалите / переименуйте текущую ветку разработки и создайте новую у мастера.
...