Как удалить набор изменений из репозитория hg без потери принятых изменений после этого - PullRequest
0 голосов
/ 06 января 2019

Мне нужно удалить набор изменений, скажем, 123b, который находится где-то посередине нескольких наборов изменений в ветви. Я совершил много изменений после 123b. Как удалить набор изменений 123b без потери последних изменений

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Скажем, у вас есть наборы изменений:

A-B-C-D-....

(где ваш 123b может быть представлен, скажем, B здесь).

Если B, C и ни один из их потомков еще не были вытеснены (поэтому они существуют только в вашем локальном хранилище), то вы можете сначала перебазировать C в A, а затем убрать B.

0 голосов
/ 06 января 2019

Технически, вы не можете: Набор изменений включает в себя всю свою родительскую историю, поэтому, удалив 123b, вы уничтожите всех его потомков. Любые непосредственные дети теперь повреждены, поскольку они ссылаются на несуществующий 123b, а любые дети этих детей косвенно повреждены и т. Д.

Однако есть и яркая сторона. Вы можете заменить всех потомков новыми, улучшенными потомками. Для этого используйте hg histedit. Это связанное расширение, которое вы должны сначала включить. (См., Например, Каковы лучшие и обязательные расширения hg / mercurial? ) (В качестве альтернативы, можно использовать rebase или трансплантат, но я не рекомендую - гистедит проще.)

Обратите внимание, что histedit по существу эквивалентен удалению набора изменений и всех его потомков, а затем добавлению новых наборов изменений. Таким образом, если вы сделали набор изменений общедоступным, отправив его другому клону, он вернется из этого другого клона позже вместе со всеми его потомками. По умолчанию histedit не позволяет вам редактировать общедоступные наборы изменений, чтобы вы не допустили эту ошибку. См. Также https://book.mercurial -scm.org / read / change-history.html .

(Существует лучший (на мой взгляд) способ, но он включает добавление не связанного расширения, в частности расширение evolve . См. этот ответ на связанный вопрос. I фактически не использовал evolve, мне просто нравится теория, лежащая в его основе.)

...