Отмена меркуриального толчка

Я использую TortoiseHg для контроля версий. Я переместился в удаленный репозиторий после того, как отправился на локальный. Как мне отменить конкретную точку фиксации?

Было три разных нажатия, и я хочу вернуться к первому нажатию. Я читал о командах hg rollback и hg undo, но я не уверен, как их использовать для выполнения этого.

Ответы

Ответ 1

Поскольку вы переместились в другой репозиторий, у вас нет способа узнать, к чему распространялись ваши изменения. Если вы не нажали, вы можете отменить, но отменить только последнюю транзакцию в любом случае.

Другой возможностью по-настоящему изменить историю будет команда strip, но опять же, потому что вы нажали, это не вариант. Если вы разделили свой локальный, вы все равно получите изменения в следующий раз, когда вы потянете.

Если у вас есть доступ к центральному, вы можете его обрезать, но если кто-то еще потянул ваши изменения, они снова появятся в центре снова в следующий раз, когда они нажимают.

На данный момент вашей единственной безопасной опцией является команда резервного копирования. Это в основном создает новый набор изменений на кончике, который отменяет изменения, которые вы случайно вложили.

Ответ 2

Из "пуристской" точки зрения Меркуриона, Майк прав - толкаемые изменения не находятся под вашим контролем. Но, на практике это часто слишком строгая перспектива.

В противовес тому, что сказал Майк, снятие уже подтолкнуло переменные может быть опцией. Это зависит от того, есть ли у вас контроль над центральным репозиторием (также там, где есть), а также от размера вашей команды/сообщества и того, как он организован.

Если вы точно знаете, что никто не потянул ваши плохие изменения, просто разделите локальное и центральное репо-операции, история удалена.

Если у вас есть шанс, что кто-то вытащил ваши плохие изменения, вы бы разделили локальное и центральное репо, а также и, вам нужно было бы уведомить всех участников команды, чтобы отменить неправильные команды изменений в их локальных репозиториях (или отменить снятое центральное репо). Если вам повезет, все делают то, что вы говорите. В противном случае изменения снова появятся в центральном репо, рано или поздно.

Суть в том, что удаление может быть решением для таких случаев, как ваше - вам нужно балансировать стоимость (бремя вашей команды с дополнительной работой) и преимущество (чистая история).


Практический пример, где преимущество перевешивает стоимость, было бы, если вы случайно добавили большие двоичные файлы. В этом случае, вероятно, каждый член команды предпочитает полосать синхронно, а не работать с взорванным репозиторием.


ОБНОВЛЕНИЕ:. Вы можете использовать перехваты на стороне сервера, чтобы предотвратить перетаскивание наборов изменений в центральный репозиторий - здесь читайте.

Ответ 3

Возможно, вам захочется прочитать hginit.com 'fixing goofs' page. Вы хотите "отступить", слить и нажать. Фактически это создает новый коммит, который выполняет инверсию изменений и применяет его.