Меркуриальные слияния? (прервать: push создает новые удаленные ветки)
Я новичок в 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: [email protected]
date: Tue Sep 13 14:25:16 2011 -0400
summary: Images from prof
changeset: 455:267abda62069
parent: 453:a74757e26357
user: [email protected]
date: Tue Sep 13 09:08:12 2011 -0400
summary: images for FLC
Направьте меня в правильном направлении?
EDIT: (добавление подробностей)
Когда я пытаюсь объединиться, я получаю следующий результат:
$ 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
Ответы
Ответ 1
Похоже, вы случайно создали ветку с глупым именем. То, что вы, скорее всего, захотите сделать, - это повторить ваши изменения с именем ветки, которое имеет смысл. Нет абсолютно автоматического способа сделать это, но вы можете извлечь каждый набор изменений как патч, вернуться к тому, что вы перепутали и повторно применить эти изменения в правильной ветке.
В основном то, что вам нужно сделать, это посмотреть на журнал изменений; возможно, запустив 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
, чтобы только изменения в правой ветки поднимались; Кроме того, вы можете установить расширение , чтобы удалить изменения, которые не были нужны из локального репо, и затем вы можете нажать как обычно.
По звуку; вам все равно придется иметь дело с изменениями, внесенными в центральный репозиторий, прежде чем вы сможете нажать, так как вы нажали изменения из другого репо. Вероятно, вы захотите сделать это слияние после очистки истории изменений в локальном репо.
Ответ 2
Потяните с удаленного компьютера, а затем сначала обновите/слейте/зафиксируйте. Тогда вы не будете создавать новые ветки.
Ответ 3
У меня это случилось, когда я пропустил слияние. Мне нравится Workbench TortoiseHg для этого, потому что может быть немного легче найти то, что вы пропустили через визуализацию.
Хороший способ избежать этого в будущем, как я прекратил получать эту ошибку, является расширение выборки. Задайте ваше сообщение, чтобы получить, и оно автоматически слит для вас, что очень приятно. Если есть конфликт, он вызывает любой используемый вами разрешитель конфликтов.