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

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

5 ответов


обновление 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

для будущих читателей: с 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 включает слияния с другими ветвями, I думаю что это сохранит их, пока staging и stiging есть же родитель. Но я бы, конечно, перепроверил.

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

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


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


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


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

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

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