Mercurial / TortoiseHg правильно говорит, что вам не следует частично совершать слияние.Частичное означает, что вы не фиксируете все файлы одновременно.
Основная причина этого сообщения заключается в том, что он дает неверные результаты.Когда вы объединяете два набора изменений в Mercurial, вы создаете новый набор изменений с двумя родительскими наборами изменений.Этот набор изменений слияния показывает другим, как вы хотите, чтобы все остальные объединяли два набора изменений.
Давайте представим, что вы начинаете с наборов изменений A
и B
и хотите объединить их.Это создает график, подобный следующему:
... --- [A]
\
[M]
/
... --- [B]
Представьте, что мы добавили строку A!
к a.txt
в наборе изменений A
и добавили B!
к b.txt
в B
changeset.Просто два независимых изменения, которые не конфликтуют.Если Mercurial разрешил вам выполнить частичную фиксацию, то вы можете сделать это:
hg merge
hg commit -m 'Added A!' a.txt # creates M
hg commit -m 'Added B!' b.txt # creates M'
, и в результате вы получите следующий график:
... --- [A]
\
[M] --- [M']
/
... --- [B]
Если вы посмотрите на b.txt
вдольпуть B
, M
, M'
, тогда вы увидите, что строка с B!
была введена в B
, удалена в M
и повторно введена в M'
!
Это не то, что вы хотите от набора изменений слиянием: частичное слияние отбрасывает изменения из одной ветви, чтобы снова представить их в последующем коммите.Mercurial доверяет вам, когда вы создаете M
: он действительно верит, что M
содержит правильное сочетание A
и B
.В частности, если строка B!
будет удалена в M
, она останется пропавшей при слиянии M
с другими наборами изменений.
Таким образом, Mercurial пытается защитить вас от создания плохой истории с помощьюне разрешает частичное слияние.