Отмена ртутного толчка - PullRequest
13 голосов
/ 03 февраля 2011

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

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

Ответы [ 3 ]

14 голосов
/ 03 февраля 2011

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

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

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

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

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


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


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

14 голосов
/ 03 февраля 2011

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

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

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

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

2 голосов
/ 03 февраля 2011

Возможно, вы захотите прочесть страницу «Исправления ошибок» на hginit.com . Вы хотите «отступить», объединить и подтолкнуть. На самом деле это создает новый коммит, который выполняет обратное изменение и применяет его.

...