У вас есть несколько вариантов, ни один из которых не является легким, и ни один из них не оставит у вас после себя чувство «фу, спасенное звонком».
Единственный настоящий Чтобы решить эту проблему, сначала попытайтесь ее избежать.
Сказав это, давайте рассмотрим варианты здесь:
- Искоренить наборы изменений
- Ввести дополнительные наборы изменений, которые «отменяют» изменения
Первый вариант - искоренить наборы изменений - сложен.Поскольку вы отправили наборы изменений в ваш центральный репозиторий, вам необходим прямой доступ к репозиториям на этом сервере.
Если это сервер, к которому у вас нет прямого доступа к репозиториям, только через веб-интерфейс,или через push / pull / clone, тогда вы можете надеяться, что в веб-интерфейсе есть методы для удаления этих наборов изменений, в противном случае перейдите к варианту 2.
Чтобы избавиться от наборов изменений, вы можете сделатьновый клон репозитория с наборами изменений, и задайте параметры, которые не будут стесняться вводить наборы изменений, от которых вы хотите избавиться, или вы можете использовать расширение MQ
и убрать нарушающие наборы изменений.
Либо это хорошо, но лично мне нравится опция клонирования.
Однако эта опция зависит от того, что все разработчики, использующие центральное хранилище, либо:
- Еще не вытащил нарушающие наборы изменений из центрального хранилища.
- ИлиМы также готовы избавиться от указанных наборов изменений локально.
Например, вы можете дать указание всем разработчикам уничтожить их локальные клоны и отложить новую копию после того, как вы удалите наборы изменений вцентральное хранилище.
Вот важная часть:
Если вы не можете заставить всех разработчиков помочь с этим, вы должны отказаться от этой мысли и перейти к варианту 2 вместо
Почему?Потому что теперь у вас есть две проблемы:
- Вам необходимо ввести барьеры, которые гарантируют, что после того, как вы избавитесь от них, ни один разработчик не сможет снова вставить те же наборы изменений на сервер.Обратите внимание, что полагаться на предупреждение сервера о том, что новые ветви не могут быть добавлены, возможно, недостаточно, поскольку разработчики могут иметь собственные ветви, которые они хотят нажать, и, таким образом, не замечают, что они будут толкатьи ваш.
- Любая работа, которую любой разработчик выполнил на основе любой из нарушающих наборов изменений, должна быть либо перенесена на новое место, либо уничтожена.
Короче говоря, это даст вам много дополнительной работы.Я бы не стал этого делать, если бы не обидчивые ревизии были сверхкритичны, чтобы избавиться от них.
Вариант 2, с другой стороны, имеет свои собственные проблемы, но его немного легче выполнить.
В основном вы используете команду hg backout
, чтобы ввести новый набор изменений, который отменяет изменения, внесенные нарушающими наборами изменений, и зафиксировать и нажать его.
Проблема здесь в том, что если в какой-то момент вы действительно если вы хотите представить эти наборы изменений, вам придется немного побороться с Mercurial, чтобы сделать слияния правильными.
Однако для ваших коллег-разработчиков больше не будет работы.В следующий раз, когда они потянут, они также получат ваш набор исправлений.
Позвольте мне просто переформулировать эту опцию другими словами:
Вместо того, чтобы избавляться от наборов изменений, сохраняйтеих, но представьте другой набор изменений, который отменяет изменения .
Ни один из вариантов не подходит, оба будут генерировать дополнительную работу.