Это сложная ситуация, чтобы объяснить, так что несите меня. У меня есть репозиторий Mercurial с двумя основными ветвями, по умолчанию и dev.
Работа обычно выполняется в именованной ветке dev (ветвь функции). В любой момент может быть много ветвей функций. Когда работа завершена в этой ветке, она будет объединена обратно в dev.
Когда придет время подготовить выпуск, другая ветвь создается из dev (ветвь освобождения). Иногда необходимо исключить целые функции из выпуска. Если это так, набор изменений слияния, из которого была объединена ветка признаков в dev, отпадает из новой ветки релиза.
Как только релиз-релиз готов к выпуску, он объединяется в значение по умолчанию (поэтому по умолчанию всегда отображается состояние кода в процессе производства). Работа продолжается как обычно на ветке dev и ветвях функций.
Проблема возникает, когда приходит время сделать еще один выпуск, включая функцию, которая была сохранена в предыдущей версии. Новая ветвь релиза создается как обычно (отключена от dev). Эта новая ветвь релиза теперь содержит функцию, которая была отброшена из предыдущей ветки релиза (поскольку резервное копирование было выполнено на ветке выпуска, а набор изменений слияния остается на ветке dev).
В этот раз, когда ветвь релиза готова к выпуску и объединена с дефолтом, любые изменения, которые были отменены в результате возврата слияния в предыдущей ветки релиза, не объединены по умолчанию. Почему это так? Поскольку новая ветвь релиза содержит все панели изменений ветвей функций (ничего не было отменено), почему ветка по умолчанию не получает также все эти изменения?
Если все вышеперечисленное сложно выполнить, вот скриншот от TortoiseHg, который показывает основную проблему. "branch1" и "branch2" являются ветвями функций, "release" и "release2" являются ветвями выпуска: