2013-08-09 3 views
2

У меня есть ветка по умолчанию, которая является открытой и особенной ветвью, которая является частной.Разверните ветвь функции, чтобы избежать слияния

default 1-----4-------8 
     \  \ 
feature 2-3---5-6-7 

Когда я делаю обновления по умолчанию, я хочу, чтобы они были доступны для ветки функций. Я мог бы сделать это с повторными слияниями, но тогда у меня было бы много слияний. У меня нет проблем с редактированием истории; ветвь функции находится только в моем локальном репозитории.

Я хочу, чтобы это сделать:

default 1-----4-8 
     \  \ 
feature 2-3-----5-6-7 

или даже лучше:

default 1-4-8 
      \ 
feature  2-3-5-6-7 

Я попытался сделать:

hg rebase --dest 8 --source 5 

Но это перемещалось элементы неправильной ветви.

default 1-----4-8-5-6-7 
     \  /
feature 2-3---- 

У ветвей есть изменения в разных файлах, поэтому нет необходимости беспокоиться о сложных слияниях.

Edit:

--keepbranches вариант, кажется, делать то, что я хочу на поверхности. Но информация об объединении фиксации кажется странной: это похоже на MercurialHg, думает, что она по-прежнему является ветвью по умолчанию, но только переименована в функцию -branch. Кажется, это хак, и я не уверен на 100%, что это путь.

+0

Поскольку вы уже сделали слияние 3 и 4 в 5, вам будет немного утомительно разобраться. Я не знаю, как это сделать. Единственный способ, который я могу придумать, - это вручную повторно применить 5, 6, 7 на 3, а затем перегрузить всю группу. Это даст вам вашу «еще лучшую» ситуацию. – Ringding

+0

Что не так слияния? Каждый раз, когда вы пересаживаете или повторно применяете патч, вы эффективно выполняете слияние, но не документируете (в наборе изменений), как это произошло. – Edward

+0

@Ringding: Поскольку изменения не перекрывались и у него были чаевые от дефолта ранее в ветви признака, это не имело значения, я надеялся, что Mercurial будет нелегко выясниться автоматически. – user694733

ответ

1

Я думаю, что ваш рабочий процесс намного лучше подходит для использования Mercurial Queues, чем для использования rebase.

Причина, заключающаяся в том, что изменить родительскую ветвь ветки на 8, когда она была 1, это не тривиальная вещь, а именно то, что вы получаете при использовании MQ.

Mercurial queues хранит набор исправлений, по одному для каждой ревизии, и позволяет легко применять/не применять при необходимости, пока вы получаете эту функцию.

В вашем сценарии вы могли бы сделать следующее:

  1. Создать первый патч, чтобы содержать ревизии 2.
  2. Создать второй патч содержит 3 ревизии.
  3. Удалить все патчи
  4. Прицепных ревизий 4
  5. Примените все патчи
  6. Создать патч для ревизии 5
  7. Создать патч для ревизии 6
  8. Создать патч для ревизии 7
  9. Удалить все патчи
  10. Pull changeet 8
  11. Применить все исправления

Это закончится тем, что вы хотите в своем еще лучшем сценарии.

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

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

Вы можете посмотреть на это tutorial, чтобы начать работу с MQ.

Смежные вопросы