Для увеличения Ответ Тима , другой способ подойти к нему - это то, как Mercurial рекомендует вам сделать это, если вы можете, планируйте заранее (я посмотрю, смогу ли я подтолкнуть ссылку.)
План состоит в том, что если вы знаете, что исправление / изменение должно происходить в нескольких ветвях, вы не вносите этот набор изменений в одно из этих мест для начала, вы делаете это где-то еще.
Поскольку вы исправляете ошибку, где-то в истории проекта эта ошибка была введена.
И поскольку исправление должно входить более чем в одну ветку, это «где-то» должно быть перед точкой, в которой вы разветвились, иначе ошибка не была бы в обеих (/ всех) ветвях.
Итак, рекомендуемый способ - исправить ошибку, в которой она была представлена, и затем объединить этот набор изменений в каждую из ветвей, которые в ней нуждаются.
Давайте рассмотрим пример, у нас есть default
и stable
ответвления:
1---2---3---4---5---6---7---8---9---10 default
\ \
\ \
11--------------12--13 stable
Затем вы обнаружите, что в changeset 2 появилась ошибка, и исправление необходимо применить к default
и stable
. То, как вы описываете это в вопросе, похоже, что вы сделали бы это:
1---2---3---4---5---6---7---8---9---10--15 default
\ \ /^-- merge stable into default
\ \ /
11--------------12--13----14 stable
^-- bugfix
Но это также объединит набор изменений 13 в default
. Если вы не хотите, чтобы это произошло, вместо этого вы должны сделать следующее:
v-- bugfix
14--------------------------+--+
/ | \
/ | \
1---2---3---4---5---6---7---8---9--x-10--15 default
\ \ | ^-- merge 14 into default
\ \ |
11--------------12--13--16 stable
^-- merge 14 into stable
Для получения дополнительной информации о том, как использовать Mercurial в сценариях исправления ошибок, 9-я глава 'Mercurial: Полное руководство' стоит прочитать.