Потерянная работа Mercurial

#mercurial

#mercurial

Вопрос:

Я внес некоторые изменения (назовем это ревизией B). Затем я hg up A вернулся к более ранней версии, чтобы исправить некоторую ошибку. Забыв, что я сделал это обновление, я понял, что зафиксировал свои последние изменения не в той ветке. Итак, я hg rollback хочу избавиться от этого коммита (B). С этой частью он справился хорошо, но теперь я сижу на ревизии A со старым кодом, мой последний коммит удален, и hg st говорит, что все обновлено в A.

Полагаю, я потерял все, что входило в коммит B? Есть ли какой-либо способ вернуть ее?

Редактировать: я никуда это не нажимал, все произошло локально

Комментарии:

1. Что ж, думайте позитивно, по крайней мере, вы научились никогда не использовать откат. Весь смысл VCS в том, что изменения в истории нельзя отменить. К сожалению, DVCS, такие как Mercurial и Git, предполагают, что изменения в некотором роде «ваши», и поэтому разрешают (даже поощряют) это. Говорю здесь как пользователь Hg.

2. @JustOnePixel @Генри Блэк — неправильно понял ваш вопрос.

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

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

Ответ №1:

Ваши изменения потеряны — rollback полностью устраняет фиксацию (ссылку)(другая ссылка). Это предпочтительнее делать revert при попытке получить доступ к предыдущим наборам изменений, поскольку это не удаляет какие-либо последующие наборы изменений — это просто изменяет текущее состояние ваших файлов, чтобы они выглядели так, как при наборе изменений, к которому вы возвращаетесь. Итак, если вы зафиксируете ревизию B, а затем вернетесь к ревизии A, ваши файлы будут выглядеть так, как они выглядели в ревизии A, но любые внесенные вами изменения будут перенесены в вашу следующую ревизию C, а ревизия B останется в вашем репозитории.