2010-12-07 4 views

ответ

199

Обновление до ветки 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 
+1

Это лучший способ сделать это, что я нашел. Закрытие ветки предотвращает случайное использование других, потому что оно не отображается на выходе «ветвей hg». Он по-прежнему позволяет вам получить к нему доступ позже, если вы знаете имя. – Utensil 2011-09-14 15:39:03

13

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

+0

+1 Это то, что я сделал бы. Старые изменения будут по-прежнему иметь имя старой ветви, но новые будут иметь новое название ветки. – barjak 2010-12-08 12:53:24

16

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

+1

Это интересное решение, вы можете разработать немного больше? – DrM 2013-01-15 19:16:10

+0

@DrM: см. Http://mercurial.selenic.com/wiki/ConvertExtension#A--branchmap – Gili 2014-06-30 17:13:26

54

Для будущих читателей: С расширением 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). Если каждый не сможет клонировать заново, это может быть не очень практичное решение для большой группы.

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

2

Это изменяет историю и предназначено только для продвинутых пользователей 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 
Смежные вопросы