Есть некая ревизия утилиты в дефолтовой ветке HG которая гарантированно собиралась билдсервером семь месяцев назад. Назовем ее 2028 (за ее номером).
В тоже время развивался соседний бранч, сутью которого был рефакторинг кода. Он начался из ревизии 712 и развивался параллельно.
Собираемая утилита активно использовала те модули, которые были под рефакторингом в соседнем бранче, но естественно не знала об изменениях производимых в них, т.к. бранч был не из ее ветки…
Через какое-то время необходимость в утилите отпала, а ветку с рефакторенным кодом смержили с дефолтовой.
Буквально сегодня потребовалось пересобрать данную утилиту заново. Зная что она не умеет работать с рефакторенным кодом, я откатился на ее самую последнюю собирабельную ревизию за номером 2028 и увидел что ее билд не успешен, т.к. она использует те модули, которые 7 месяцев назад были изменены в соседнем бранче, а не те, с которыми она тогда собиралась изначально.
Вопрос.
Каким макаром мердж двух бранчей мог изменить модули, разработка которых велась в двух параллельных ветках.
Т.е. что могло привести к такому поведению?
В команде все используют Merge, за исключением одного сотрудника, который использует Rebase и собственно который и производил рефакторинг кода.