Новая дистанционная головка при нажатии на новую ветку
Я создал филиал named
в mercurial, внес некоторые изменения, и теперь я хочу вернуть его в центральное РЕПО. Я сделал выборку, проверил, что у меня нет изменений для слияния, но когда я пытаюсь сделать толчок, я получаю сообщение push creates new remote head
, но я не понимаю, почему. Я единственный dev на этой ветви, и она все еще локальна для моего репозитория.
>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)
Есть идеи?
Edit : извините за любую путаницу, это является именованной ветвью, созданной hg branch mybranch
Update : использование 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 ответа:
Путаница заключается в том, что флаг
--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
предназначен только для названные ветви . Mercurial обычно прерывается, если вы отправляете новую именованную ветвь в удаленный репозиторий. Добавление флага--new-branch
- это то, как вы говорите ему идти вперед.--create-new-feature-branch
. У нас есть только флаг--force
, который говорит Mercurial идти вперед и создать две головы в удаленном хранилище. Недостатком--force
является то, что он отменяет все проверки безопасности: вы можно нажать три или более новых головы с этим флагом, и вы даже можете нажать в несвязанное хранилище. Поэтому вы должны использоватьhg outgoing
, чтобы дважды проверить, что вы собираетесь толкать.Я писал выше, что несколько голов на сервере сбивают с толку, так как новый клон будет обновлен до случайной головы. Чтобы избежать путаницы, вы можете дать названия ветвям функций, поместив их в закладки . Вы все равно будете обновлены до случайной головы, но
hg bookmarks
покажет вам доступные ветви функций и вы затем можно обновить до нужного. Поэтому, если вы используете такой рабочий процесс, то продолжайте сhg push -f
.
Просто волшебным образом разрешил это, но до сих пор не ясно, почему. Похоже, это действительно проблема с
default
, хотя я не работаю над этой веткой. Я мог бы позвонить>hg branch
и получить ожидаемое имя ветви.У меня было изменение в моей локальной ветви
default
, которое не было выдвинуто и не хотело. Я отступил от этого изменения,а затем совершил его. Затем я сделалfetch
на ветке по умолчанию и объединил ее с моей веткой функций. Затем снова наdefault
я слился с набором изменений по умолчанию, из которого я вышел Я верю. В какой-то момент во время этого процесса я получил еще одну голову, которая, вероятно, вызвала множественные слияния.Все это, кажется, сводится к существующим головам по умолчанию, но я все еще не знаю, почему (или почему мы хотели бы), что влияет на отдельную именованную ветвь.
Все это кажется слишком сложным для того, что я ожидаю (и что каждый может просто нарисовать в диаграммах ascii)
Edit
Похоже, что проблема возникла во время начальной может быть, ветка. Похоже, что я разветвился дважды и
[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)