Сначала некоторые основы:
Слияния носят направленный характер:
- При слиянии
bugfixes
в master
, затем master
получает наборы измененийкоторые были зафиксированы в ветви bugfixes
. - Когда вы объединяете
master
в bugfixes
, происходит обратное.
Если вы хотите, чтобы две ветви отражали друг друга, тогда вы должны выполнить слияние в обоих направлениях.
Я бы сказал, что вам вообще не нужна ветка bugfixes
. Вместо этого я бы установил политикув котором говорится:
master
всегда должно быть в состоянии, которое может быть выпущено - Исправления ошибок фиксируются в
master
- Все выпуски помечены тегами
master
- Новые функции передаются в
develop
- Когда наступает время выпуска,
develop
объединяется в master
- После каждого выпуска,
master
объединен с develop
, чтобы гарантировать, что новые функции основаны на последней версии.
Это приведет к чему-то вроде этого:
Если у вас должна быть ветка bugfixes
, тогда я устанавливаю такую политику:
master
всегда должно бытьв состоянии, которое может быть выпущено - Все выпуски являются тегами
master
- Исправления ошибок фиксируются в
bugfixes
- Новые функции фиксируются в
develop
- Когда пришло время для исправления ошибки:
- Объединить
bugfixes
в master
- Метка
master
- Объединить
master
в bugfixes
, чтобы они соответствовали - Объедините
master
в develop
, чтобы убедиться, что новые функции основаны на последней версии.
- Когда придет времядля основного выпуска:
- Слияние
bugfixes
в master
- Слияние
develop
в master
- Метка
master
- Слияние
master
в bugfixes
, чтобы они соответствовали - Слияние
master
в develop
, чтобы убедиться, что новые функции основаны на последних
Это приведет к чему-то похожему на это:
Чтобы исправить ошибку в старой ревизии, вы должны:
hg update <TAG>
hg branch Release1.x
<fix the bug>
hg commit -m "Bug fix to older version"
hg tag Release1.2
...if the bug is present in master, then you should also:
hg update master
hg merge Release1.x
hg commit -m "merged bug fix in Release1.x to master"
Это приведет к чему-то вроде этого:
ПРИМЕЧАНИЕ 1: На данный момент master
имеет коммиты, которые никогда не должны быть частью Release1.x
релиза.В связи с этим вам никогда не следует сливать master
в Release1.x
.
ПРИМЕЧАНИЕ 2: Если вам требуется поддержка нескольких выпусков продукта в поле, обычно бываетименованная ветка для каждого основного выпуска.Эти продолжительные именованные ветви затем используются только для исправления ошибок.Если вы очень осторожны, вы можете объединить исправления ошибок из одной ветки релиза в другую, но, по моему опыту, для копирования изменений между ветвями чаще используется hg transplant
.