Mercurial отменить три HG толчок - PullRequest
6 голосов
/ 10 февраля 2012

Я использую Mercurial VCS, я по ошибке выдвинул три коммита и хочу, чтобы они были отменены, это может быть достигнуто? Я уверен, что никому не было передано никаких изменений из репозитория, в который я был загружен, поэтому я уверен, что это не нарушит чей-либо код ...

Я попробовал откат hg, но так как я нажал, я не могу отменить что-либо правильно. Также я знаю о hg backout, но я не уверен, должен ли я использовать это для того, что мне нужно ...

Спасибо!

EDIT

Это журнал журнала, я забыл упомянуть, что некоторые коммиты были частью слияния, но их тоже нужно отменить ...

tip
|
a
| \
|   b
| /
c
|
d

Мне нужно вернуть подсказку c или d, если нет другого способа предотвратить это из-за слияния ...

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

Если она уже нажата, вы можете сделать только две вещи:

1) Если вы можете удалить центральное хранилище и заменить его другим:
Вы можете клонировать центральное хранилище, но скажите Mercurial клонировать только до набора изменений "c" .
Затем вы можете взять этот репозиторий (в котором нет неправильных изменений) и заменить «старый» центральный репозиторий (тот, в котором есть неправильные изменения).

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

2) Если вариант 1 невозможен, вы можете использовать hg backout для отмены эффектов неправильных изменений - не самих наборов изменений.
Цитата по ссылке:

Backout работает, применяя набор изменений, противоположный набору изменений, подлежащему возврату. Эта новая ревизия фиксируется в хранилище и в конечном итоге объединяется.

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

2 голосов
/ 11 февраля 2012

Если вы уверены, что push - это последнее, что произошло с этим удаленным репозиторием, а это означает, что ни вы, ни кто-либо еще не отправили его в него, вы можете войти в систему и запустить hg rollback.

Если это репозиторий на машине, к которой вы можете подключиться по ssh, вы можете запустить эту команду в вашей локальной системе:

ssh you@there hg -R /path/to/the/repo rollback

Как всегда, пожалуйста, будьте очень осторожны с откатом .Он отменяет последнее действие в репозитории, вообще не изменяя рабочий каталог, и не всегда понятно, каким было последнее действие.Например, это datalosss:

...hack...
hg commit -m 'important work'
hg update somewhere else
hg rollback

Yikes!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...