LINUX.ORG.RU

[hg]создать новый default бранч

 


0

1

Пусть в репозитории есть 10 ревизий, но я неожиданно понял, что хочу вернуться к 5 ревизии и начать делать другой функционал. Причем ревизии с 6 по 10 мне не факт, что понадобятся когда-нибудь, но на всякий случай хотелось бы их положить в закрытый бранч.

т.е. хочется из такого

o---o---o---o---o---o---o---o---o---@
1   2   3   4   5   6   7   8   9   10
получить такое
o---o---o---o---o---o---@
1   2   3   4   5 \ 11  12
                   ---o---o---o---o---o
                      6   7   8   9   10

Пытался делать новый бранч с существующим именем default и закрывать старый. Пробовал анонимный бранч делать и закрыать его. В локальной копии все выглядит так, как я хочу, но когда пытаюсь сделать push - ругается:

abort: push creates new remote heads on branch 'default'! (did you forget to merge? use push -f to force)

-f, конечно, можно заюзать, но может я пытаюсь сделать что-то неправильное?

★★

rebase или transplant, если хочешь оставить 6-10 в отдельной ветви.

JackyTreehorn
()

Ну во-первых, для экспериментов надо использовать отдельную ветку или mq, что ещё лучше. Во-вторых, зачем именно в отдельную ветку их выносить? Сделай backout и вся любовь. И в-третьих, если эти ревизии ещё не расползлись, можно загнать их в mq, назначить их в другую именованую ветку, закрыть её и поиметь профит.

Zenom ★★★
()

Попробую объяснить по другому: хочу сделать бранч из середины дерева комитов и назначить его как default, а прежний default назвать как-нибудь, например obsolete_default.

kulti ★★
() автор топика
Ответ на: комментарий от Zenom

Предположим, что нет, но этот репозиторий находится на bitbuket (или гуглокоде или еще где-нибудь)

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Тогда 3-й вариант. Нужно подключить mq. Потом что-то типа такого:

hg init --mq
hg qimport -r 6 -r 7 -r 8 -r 9
hg qpop -a
hg branch obsolete_default
hg qpush -a
hg qfin -a

После этого сделать strip на bitbucket и hg push.

Zenom ★★★
()
Ответ на: комментарий от Zenom

длинную вереницу комманд можно одним transplant'ом сделать, на сколько я понимаю. А вот что значит «сделать strip на bitbucket»?

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Никогда не имел дела с transplant и не знаю, переносит он коммиты или копирует. По логике вещей должен копировать, а это не подходит. Хотя, можно, конечно, сделать transplant, а потом strip. К тому же ни transplant, ни rebase не имеют опций для указания нового имени для ветки. Поэтому и приходится всё делать явными манипуляциями с mq.

А вот что значит «сделать strip на bitbucket»?

Это значит, что надо удалить коммиты.

Zenom ★★★
()
Ответ на: комментарий от Zenom

transplant сам создаст патч и наложит на нужный бранч, т.е. тоже копирует, но писать меньше просто))

А вот strip я что-то никак на bitbucket не найду... Да и в любом случае получается, что если коммиты расползлись, то уже ничего не сделать красиво: только новый бранч, туды все нужные ревизии, а в default делаем backout...

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.