Mercurial объединяет ветки? (abort: push создает новые удаленные ветви) - PullRequest
13 голосов
/ 16 сентября 2011

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

Теперь на моем основном сервере разработки все обновлено и готово.Однако ...

$ hg push
abort: push creates new remote branches: 4f2672f039d7!
(use 'hg push --new-branch' to create new remote branches)

Я не хочу новую ветку.Я просто хочу, чтобы все изменения были объединены.

$ hg heads
changeset:   459:ff5f94e44aba
branch:      4f2672f039d7
tag:         tip
parent:      458:e63d02baf4cf
parent:      455:267abda62069
user:        mike@...
date:        Tue Sep 13 14:25:16 2011 -0400
summary:     Images from prof

changeset:   455:267abda62069
parent:      453:a74757e26357
user:        mike@localhost.localdomain
date:        Tue Sep 13 09:08:12 2011 -0400
summary:     images for FLC

Направьте меня в правильном направлении?

РЕДАКТИРОВАТЬ: (добавив детали)

Когда я пытаюсь объединить,Я получаю следующий результат:

$ hg merge
abort: branch '4f2672f039d7' has one head - please merge with an explicit rev
(run 'hg heads' to see all heads)

Я пробовал hg merge ff5f94e44aba, и все перечисленные выше обороты, и каждая возвращает один и тот же результат:

$ hg merge 267abda62069
abort: merging with a working directory ancestor has no effect

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

Похоже, вы случайно создали ветку с глупым именем. Скорее всего, вы захотите повторно применить изменения с именем ветви, которое имеет смысл. Не существует полностью автоматического способа сделать это, но вы можете извлечь каждый набор изменений в виде патча, вернуться к моменту, когда вы напутали, и повторно применить эти изменения в соответствующей ветке.

По сути, вам нужно посмотреть журнал изменений; вероятно, запустив hg out, чтобы увидеть, чего не хватает в центральном хранилище. Запишите все обороты, которые вы хотите сохранить.

Следующее обновление до последней хорошей ревизии. Убедитесь, что вы находитесь в той ветке, в которой хотите, чтобы ваши коммиты были включены.

Теперь вы будете применять каждое из внесенных вами изменений и фиксировать каждое из них. Вы можете автоматизировать этот процесс примерно так:

BADREVS="123 124 125 126"

recommit() { hg di -c $1 | patch -p1;  hg ci -m "$(hg log -r $1 --template '{desc}')";}
for rev in $BADREVS; do
    recommit $rev
done

Теперь вы дважды вносите изменения в свой локальный репозиторий; один раз как коммит на странной ветке и снова на правой ветке. Вы можете отправить эти изменения в центральный репозиторий, используя hg push -b GOODBRANCH, чтобы увеличивались только изменения в правой ветви; Кроме того, вы можете установить расширение полосы , чтобы удалить изменения, которые вы не хотели, из локального репо, а затем вы можете нажать как обычно.

По звуку этого; вам все равно придется иметь дело с изменениями, внесенными в центральное хранилище, прежде чем вы сможете нажать, так как вы передали изменения из другого репо. Возможно, вы захотите сделать это слияние после того, как вы очистите историю изменений в локальном репо.

4 голосов
/ 16 сентября 2011

Потяните с пульта, а затем обновите / объедините / зафиксируйте сначала.Тогда вы не будете создавать новые ветви.

3 голосов
/ 16 сентября 2011

У меня было такое, когда я пропустил слияние. Мне нравится инструмент TortoiseHg для этого, потому что может быть немного легче найти то, что вы пропустили с помощью визуализации.

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

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