Почему я получаю кучу коммитов слияния? - PullRequest
1 голос
/ 12 апреля 2019

Мы работаем с веткой релиза, веткой разработчика и ветками выпуска.

Наши ветки выпуска содержат только коммиты этого выпуска.

Как только разработчик завершает задачу и отправляет запрос на извлечение, он объединяется с dev, чтобы он оставался обновленным.

После тестирования отдельных веток выпуска эти ветки поочередно объединяются в выпуск.

На этом этапе наш журнал изменений обновляется в ветке релиза, а затем он снова объединяется с dev.

Конечным результатом является то, что у меня в dev появляется куча коммитов слияния, поэтому похоже, что dev - это куча коммитов перед выпуском, хотя на самом деле все должно быть зафиксировано. Например:

* +1012 *enter image description here

На этом этапе, если я сливаю dev обратно в релиз, это показывает, что они больше не находятся впереди / позади друг друга, но никакого нового кода фактически не было введено. Это просто набор коммитов слияния.

Что мы делаем неправильно, что вызывает это? Будем весьма благодарны за любую информацию о том, как мы можем улучшить эту процедуру и избежать ее. Спасибо!

1 Ответ

3 голосов
/ 12 апреля 2019

Вы не делаете ничего «неправильного» как такового;git просто записывает то, что вы ему сказали:

  • Коммит в git - это неизменный объект, определяющий его содержимое плюс метаданные.Важно отметить, что это включает в себя хэши (идентификаторы коммитов) родительского (ых) коммита.
  • Когда вы объединяете две ветви вместе, git создает коммит, содержимое которого является результатом слияния, а метаданные которого содержат идентификаторы.обоих родительских коммитов.
  • Если объединить одни и те же изменения в другом порядке или даже просто в разное время, результирующее содержимое может быть одинаковым, но метаданные 1011 * будет другим.
  • Когда git сравнивает две ветви, он сначала смотрит на то, какие коммиты (с уникальными хэшами) существуют в истории одной ветви, но не в истории другой.Затем он просматривает изменения, внесенные в контент в этих коммитах, и пытается их повторно применить.

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

В некоторых случаях вы можете выполнить ребазирование, а затем «быстрое слияние», чтобы избежать созданияФиксация слияния (так что история выглядит так, как будто все коммиты были сделаны непосредственно в одной ветви, и нет записи о самом слиянии).Тем не менее, здесь все будет на хуже , потому что, если вы перейдете на ветку релиза, вы создадите новый набор коммитов, которых нет на dev - вы не сможете "переместить" gitcommit, только скопируйте его и получите новый хеш.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...