Mercurial: Можно ли переименовать ветку?

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

Ответ 1

Обновите ветвь 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

Ответ 2

Для будущих читателей: с расширением 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): Теперь, когда phases являются стандартными в меркуриальном режиме, rebase откажется изменять изменения которые уже были выдвинуты. Или обманите его, изменив фазу назад на черновик (с помощью hg phases), или пусть старая ветка останется там, где она есть, и просто создайте правильно названную копию (например, с помощью `hg rebase --keep ').

Ответ 3

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

Ответ 4

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

Ответ 5

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

Если stiging является только локальным, вы можете изменить его на этап с комбинацией graft и strip. Начните с обновления до набора изменений предков, где стигляция расходится. Создайте промежуточную ветку и пересадите каждую фиксацию из строения в стадию. Теперь постановка должна быть копией стигирования. Наконец, уничтожьте стигмент, сняв его первый фиксаж.

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