2013-05-21 2 views
1

Предположим, у меня есть набор изменений A, и я делаю ревизии B1, B2 и B3 поверх A, в то время как другой разработчик делает списки изменений C1, C2 и C3 поверх A:Могу ли я объединить несколько последовательных наборов изменений в набор изменений в Mercurial

 B1 --- B2 --- B3 
    /
--- A 
    \ 
     C1 --- C2 --- C3 

другой разработчик толкает его код в центральное хранилище, и теперь я хочу, чтобы подтолкнуть мой код, но я не могу, потому что есть несколько глав. Я мог бы переустанавливать свои ревизии, чтобы идти поверх него (и это то, что я делал), но было бы более точно слить.

Однако, насколько мне известно, я могу объединить только один набор изменений за раз. Поэтому мне пришлось бы объединить B1 на C3, создавая M1, и B2 на M1, создавая M2, и B3 на M2, создавая M3. Это три слияния, которые я должен выполнить, и три новых слияния, забивающих репозиторий! Есть ли способ, которым я могу объединить B1, B2 и B3 на C3 сразу, или мне нужно решить, как изменить историю, используя rebase?

ответ

4

Вы можете объединить B3 и C3, чтобы получить:

 B1 --- B2 --- B3 
    /    \ 
--- A     M 
    \    /
     C1 --- C2 --- C3 

Это традиционный способ reconsile две линии развития. Набор изменений слияния будет иметь двух родителей (в слияниях всегда есть два родителя в Mercurial) B3 и C3, но вы все еще объединяете объединенный эффект B1-B3 с комбинированным эффектом от C1 до C3.

Фактически, слияния связаны только с тремя состояниями: A, B3 и C3. Поскольку состояние B3 включает изменения, внесенные вами в B1 и B2, вы в конечном итоге объединяете изменения в B1-B3 в состояние C3.

То, что вы описали с тремя слияниями, на самом деле является тем, что делает внутренняя перестановка! После создания M1-M3 он удаляет второй родительский данных коммитов и удаляет B1-B3. Это дает вам

--- A --- C1 --- C2 --- C3 --- M1 --- M2 --- M3 

где Mi ~ = Bi. Как вы заметили, это менее точное представление о том, что на самом деле произошло в репозитории, потому что вы линеаризовали историю, что действительно делалось параллельно.

+0

О, хорошо! Я думал об этом, но по какой-то причине мой мозг предположил, что он просто сольется с изменениями от B3, а не с изменениями от B1 и B2. – ekolis

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