Это возможно локально, но не глобально, и оно меняет идентификатор каждого коммита после точки, в которую был добавлен файл. Чтобы изменения вступили в силу, вам потребуется доступ к каждой копии хранилища, особенно к тем, которые извлекаются или выталкиваются.
Тем не менее, я следовал последовательности История редактирования , описанной в вики Mercurial, чтобы удалить файл из одного из моих репозиториев. Эта последовательность предполагает, что в ревизии 1301: 5200a5a10d8b добавлен файл path/to/badfile.cfg
, который не был изменен ни в одной из последующих ревизий:
Включите расширение MQ в вашем .hgrc
:
[extensions]
mq =
Извлечь последние изменения из апстрима.
hg pull
Импортировать все, начиная с добавления файла, в MQ:
hg qimport -r 1301:tip
hg qpop -a
Удалить файл из коммита, который его добавил.
hg qpush 1301.diff
hg forget path/to/badfile.cfg
hg qrefresh
Преобразование исправлений в новые версии Mercurial.
hg qpush -a
hg qfinish -a
Выдвиньте новые ревизии вверх по течению.
hg push -f
В вышестоящем репозитории и каждой другой копии удалите старые ревизии.
hg strip 5200a5a10d8b
Предупреждение : Этот шаг может разрушить работу, если вы не будете осторожны. Если кто-то совершил что-либо с тех пор, как вы в последний раз вышли из апстрима, вам придется перебазировать эту работу, прежде чем убирать. К сожалению, расширение rebase
здесь не поможет; вам придется снова использовать MQ, преобразовывая новые коммиты в патчи, которые вы применяете к новому совету.
Удачи.