Mercurial: можно переименовать ветку? - PullRequest
199 голосов
/ 07 декабря 2010

Теперь у нас есть «жесткая» ветвь, в которой «постановка» кажется гораздо лучше семантической.Какая хорошая стратегия для этого?

Ответы [ 5 ]

216 голосов
/ 30 августа 2011

Обновите ветку stiging и создайте из нее новую ветку.Затем закройте старую ветку.

В итоге:

hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch
58 голосов
/ 03 апреля 2012

Для будущих читателей: с расширением rebase вы можете создать новую ветвь с тем же родителем, что и stiging, и переместить в нее всю историю веток, например:

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging

Предполагается, что stiging имеет только одного родителя. Конечно, вы можете просто использовать явные номера ревизий.

Примечание 1: Если ветвь stiging включает слияния с другими ветвями, я думаю , что это сохранит их, пока у staging и stiging один и тот же родитель. Но я бы, конечно, перепроверил.

Примечание 2: Поскольку это редактирует историю, старая ветвь не просто исчезнет из клонированных репозиториев (см. Документацию rebase). Если каждый не сможет клонировать заново, это может оказаться не очень практичным решением для большой группы.

Примечание3 / Правка (любезно предоставлено @JasonRCoombs): теперь, когда фазы являются стандартными в Mercurial, rebase откажется изменять изменения, которые уже были переданы. Либо дурачите его, изменяя фазу обратно на черновик (с помощью hg phases), либо оставьте старую ветвь там, где она есть, и просто сделайте копию с правильным именем (например, с помощью `hg rebase --keep ').

16 голосов
/ 07 декабря 2010

Если у вас есть наборы изменений, вам придется использовать расширение convert с картой ветвления, чтобы переименовать его. Тогда всем придется клонировать новый репо или убрать старую ветку.

15 голосов
/ 07 декабря 2010

Создайте новую ветку под названием «постановка» и забудьте другую ...

3 голосов
/ 07 декабря 2016

Это изменяет историю и предназначено только для опытных пользователей Mercurial. Не делайте этого, если не знаете, что это значит.

Если стимуляция только локальная, вы можете изменить ее на постановку с помощью комбинации трансплантат и полоса . Начните с обновления набора изменений предка, где отклонение от нормы отклонилось. Создайте промежуточную ветвь и пересаживайте каждый коммит от стимуляции до постановки. Постановка должна теперь быть копией стигинга. И наконец, уничтожьте ударение, сняв первый коммит.

hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch
...