Новая дистанционная головка при нажатии на новую ветку - PullRequest
7 голосов
/ 28 февраля 2012

Я создал ветку named в Mercurial, внес некоторые изменения, и теперь я хочу перенести это обратно в центральное хранилище. Я сделал выборку, подтвердил, что у меня нет изменений для слияния, но когда я пытаюсь сделать push, я получаю сообщение push creates new remote head, но я не понимаю, почему. Я единственный разработчик в этой ветке, и она все еще локальна для моего хранилища.

>hg fetch (pull/update/merge)
>hg status (shows nothing)
>hg push --new-branch mybranch
 searching for changes
 new remote heads on branch 'default'
 new remote head c3064f3cf1b7
 abort: push creates new remote head c3064f3cf1b7!
 (did you forget to merge? use push -f to force)

Есть идеи?

Редактировать : извините за путаницу, этот является именованной ветвью, созданной hg branch mybranch

Обновление : использование hg heads дает несколько головок на всех ветвях. У меня есть один для моей ветви, и один по умолчанию:

changeset:   515:97b9a7802751
branch:      mybranch
user:        me <me@mymail.com>
date:        Mon Feb 27 13:21:54 2012 -0800
files:       CryptoRandom.cs
description:
fixing error message for size of max


changeset:   504:c3064f3cf1b7
user:        me <me@mymail.com>
date:        Thu Feb 09 11:41:32 2012 -0800
files:       CipherKey.cs
description:
removing ambiguous characters - CAC-47

Использование hg log -r c3064f3cf1b7 дает следующее (это заголовок по умолчанию):

changeset:   504:c3064f3cf1b7
user:        me <me@mymail.com>
date:        Thu Feb 09 11:41:32 2012 -0800
files:       CipherKey.cs
description:
removing ambiguous characters - CAC-47

Ответы [ 2 ]

14 голосов
/ 28 февраля 2012

Смущает то, что флаг --new-branch не действует при нажатии на ветви функций (также известные как anynomous ветви). Анонимная ветка выглядит так:

... [a] --- [b] --- [c] <- the servers head on default
               \
                [x] --- [y] <- my feature branch on default

Все ревизии включены default, поэтому теперь у вас есть две головы на default. Когда вы нажмете, вы создадите две головы на сервере - но Mercurial прерывает это с предупреждением, которое вы видите. Он прерывается, поскольку наличие нескольких головок на сервере сбивает с толку: когда вы hg clone, ваша рабочая копия будет обновлена ​​до одной из них, почти случайно.

Флаг --new-branch предназначен только для с именем branch . Mercurial обычно прерывается, если вы отправляете новую именованную ветку в удаленный репозиторий. Добавление флага --new-branch - это то, как вы говорите ему идти вперед.

К сожалению, у нас нет выделенного --create-new-feature-branch флага. У нас есть только флаг --force, который сообщает Mercurial, что нужно создать две головы в удаленном хранилище. Недостатком --force является то, что он отменяет все проверки безопасности: вы можете вставить три или более новых голов с этим флагом, и вы даже можете вставить в несвязанный репозиторий. Поэтому вы должны использовать hg outgoing, чтобы дважды проверить, что вы собираетесь нажать.

Я писал выше, что несколько головок на сервере сбивают с толку, поскольку новый клон будет обновлен до случайной головы. Чтобы избежать путаницы, вы можете присвоить названия веткам элементов, добавив в закладки их Вы все равно будете обновлены до случайного заголовка, но hg bookmarks покажет вам доступные ветви функций, и вы сможете затем перейти к нужному. Так что, если вы используете такой рабочий процесс, тогда продолжайте с hg push -f.

1 голос
/ 03 марта 2012

Просто волшебным образом решил это, но до сих пор не ясно, почему.Кажется, это проблема с default, хотя я не работаю над этой веткой.Я мог бы позвонить >hg branch и получить ожидаемое имя филиала.

У меня было изменение в локальной ветке default, которое не было отправлено и не хотело.Я отказался от этого изменения, а затем совершил.Затем я сделал fetch в ветви по умолчанию и объединил ее с моей функциональной веткой.Затем вернемся к default. По умолчанию я объединился с набором изменений, из которого я отказался.В какой-то момент во время этого процесса у меня появилась еще одна голова, которая, вероятно, вызвала множественные слияния.

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

Все это кажется слишком сложным для того, что я ожидаю (и что каждый может просто нарисовать на диаграммах ascii)

Редактировать

Похоже, проблема возникла во время начальной ветки, возможно.Похоже, я разветвлялся дважды, и [j] по умолчанию является анонимной ветвью.

для визуализации того, что происходит [j] - моя ревизия, из которой я отступил, и [k] - моя перваясовершить на mybranch:

[a] -- [b] -- [c] -- [d] -- [e]  (default)
         \             \    /
          [j]-----------\---     (not sure where this branch came from)
            \            \
            [k] -- [l] -- [m]    (mybranch. Still separate from default)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...