Отменить многие коммиты (15) в mercurial

У меня "тестовая" ветка, и в ней 15 неправильных коммитов (они последние коммиты в этой ветке). Мне не нужны эти коммиты, и я хочу их отменить. Но мне также нужно иметь "тестовую" ветку, я не могу просто закрыть ее.

  • Как отменить многие коммиты? Слишком сложно сделать это с помощью mercurial standart backout, будет слишком много коммитов и слияний. Есть ли способ объединить все backout-коммиты в один большой коммит?

  • Есть ли способ переименовать ветку и закрыть ее?

Все изменения существуют на удаленном сервере. Эти изменения не являются последними во всем репо, они являются последними наборами изменений только в тестовой ветке.


person nkuhta    schedule 22.12.2014    source источник


Ответы (2)


Если вам нужно оставить наборы изменений в истории (особенно потому, что вы не можете быть уверены, что они могут быть strip-ed из каждого репо), у вас есть несколько вариантов:

1) просто зафиксируйте --close-branch кончик вашей тестовой ветки, update до последней ревизии, которая была хорошей в этой ветке, и снова откройте свою тестовую ветку с новыми фиксациями оттуда. Это работает, потому что именованная ветвь может иметь несколько головок.

2) используйте hg revert -r <last good rev> и зафиксируйте. Это должно сделать рабочий каталог точно таким же, как <last good rev>, а затем вы можете зафиксировать набор изменений, который эффективно отменяет то, что произошло в 15 изменениях, которые вы хотите удалить. Я бы использовал hg diff -r <last good rev>, чтобы убедиться, что это именно так, поскольку вам может понадобиться исправить файлы, которые были добавлены или удалены.

Если вы можете strip внести изменения с сервера (как указано в @Dalija answer), но хотите сохранить версию локально для возможного использования в будущем, проверьте hg phase, чтобы принудительно перевести фазу на secret локально после strip -ing их отовсюду. Таким образом, они по-прежнему будут у вас, но по умолчанию они не будут выталкиваться.

person Edward    schedule 22.12.2014

Вы можете использовать hg strip для удаления наборов изменений и их потомков из репозитория. Но вам придется сделать это во всех репозиториях, где вы хотите обрезать свою ветку test, иначе они вернутся, когда вы pull.

https://www.mercurial-scm.org/wiki/StripExtension

person Dalija Prasnikar    schedule 22.12.2014