TortoiseHG: не может частично совершить слияние - PullRequest
11 голосов
/ 29 июля 2010

Я попытался объединить две головы в Mercurial. После слияния я не зафиксировал и сделал еще несколько изменений. Затем я попытался зафиксировать и получил следующее сообщение:

abort: не удается частично зафиксировать слияние (не указывайте файлы или шаблоны)

Я использую TortoiseHG в качестве визуальной оболочки и Beyond Compare для сравнения и слияния. И я относительно новичок во всех из них.

Что я должен сделать, чтобы успешно завершить коммит?

Ответы [ 6 ]

13 голосов
/ 12 августа 2010

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 пытается защитить вас от создания плохой истории с помощьюне разрешает частичное слияние.

7 голосов
/ 24 августа 2011

Я думаю, что у вас есть псевдонимы в файле hgrc. Попробуйте удалить секцию [alias] и зафиксировать снова.

3 голосов
/ 29 июля 2010

Что я должен сделать для успешного завершения коммита?

Одним из преимуществ Mercurial (или git или любого другого DVCS ) является то, что вы можете выполнитьзафиксировать в любой точке вашего процесса разработки, и это будет как быстро, так и конфиденциально.Это будет быстро, потому что вы должны фиксировать локальную копию хранилища, находящегося на вашем жестком диске, и это будет конфиденциально, потому что никто не увидит ваш набор изменений, пока вы не отправите их на сервер (или в другой главный репозиторий).

Поэтому, чтобы частично ответить на ваш вопрос, уместно было бы совершить слияние без внесенных вами изменений, а затем применить и зафиксировать следующую волну изменений.Если вы используете TortoiseHG для выполнения слияния, он фактически предложит вам выполнить слияние перед выходом из графического интерфейса, потому что это намеченный рабочий процесс HG.

При этом я внес некоторые изменения в именованную ветку (т.е.: new head), слил его обратно в ветку по умолчанию, вышел из графического интерфейса TortoiseHG без фиксации, внес дополнительные изменения, а затем зафиксировал без проблем.Ниже вашего первоначального запроса я задам несколько уточняющих вопросов.

1 голос
/ 23 октября 2015

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

0 голосов
/ 15 ноября 2018

У меня была та же проблема, и команда, которую я дал, была

hg commit -m Merge with 1234

Через некоторое время я понял, что сообщение о коммитеСлияние с 1234 "должно быть указано в кавычках, поскольку команда принимает" with "и" 1234 "в качестве параметров имени файла.

пожалуйста, отметьте это в вашем случае.

0 голосов
/ 05 сентября 2014

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

Проблема была в разделе [default] в моем .hgrc

[defaults]
commit = -X project/web.config

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

Просмотрите раздел настроек по умолчанию на предмет возможных проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...