Подтвердить что ты не робот

Mercurial: переключить рабочий каталог в ветку без потери изменений?

Скажем, что у меня есть именованная ветвь "B1", на которой я занимаюсь разработкой функций. Я нахожусь в хорошей остановке перед демонстрацией, но не выполнил эту функцию, поэтому я:

hg up default
hg merge B1
hg ci -m "merged in feature drop"
hg push

Теперь я продолжаю работать полчаса или около того и перехожу к фиксации только для того, чтобы понять, что я забыл обновиться до B1 и что мой текущий рабочий каталог находится на default - uhoh. Теоретически я должен иметь возможность просто пометить родительский родительский каталог как кончик B1 - есть ли простой способ сделать это?

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

4b9b3361

Ответ 1

Два способа. Во-первых, очевидный способ:

hg diff > foo
hg up -C b1
hg import --no-commit foo
rm foo

Во-вторых, магический способ:

hg up -r 'ancestor(., b1)'  # take working dir back to the fork point
hg up b1                    # take it forward to the branch head

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

Ответ 2

Я бы использовал расширение полки. Я думаю, что он распространяется вместе с TortoiseHg, вы также можете использовать его из пользовательского интерфейса:

hg shelve --all
hg up B1
hg unshelve

Ответ 3

Как правило, для такого рода динамического подхода я предпочитаю очередности в отношении меркурий.

В вашей ситуации, что бы я сделал, было бы создать патч по умолчанию с изменениями, отключить патч, переключиться на B1 и применить патч.

Это выглядит примерно так:

hg qnew OOPSPATCH
hg qrefresh 
hg qpop 
hg up B1 
hg qpush

<hack hack>

hg qrefresh 
hg qfinish

Ответ 4

Расширение базы данных позволяет вам изменять родительский элемент для любого фиксации для ошибочно настроенного набора изменений.

Если вы хотите просто изменить ветвь для будущей фиксации - MQ (как указано) или Shelve