Как я могу восстановить хранилище, сломанное hg unshelve?

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

Как только моя работа над другой головой была завершена, я переключился обратно на голову, на которой я первоначально использовал hg shelve и побежал hg unshelve команда. Это был результат:

$ hg unshelve
unshelving change 'default'
adding changesets
adding manifests
adding file changes
added 1 changesets with 4 changes to 4 files (+1 heads)
abort: uncommitted changes
$ hg diff
warning: ignoring unknown working parent 893e15ecb5b4!
$ 

Я бегал hg head до и после unshelve Команда и увидела идентичные выводы. Совершить 893e15ecb5b4 никогда не существовало, я понятия не имею, откуда Mercurial получил его.

Если это имеет какое-либо отношение, я использую Mercurial версии 2.8.2 на Ubuntu 14.04.

Как я могу вернуть свой репозиторий в рабочее состояние и как я могу вернуть отложенные изменения обратно?

1 ответ

Решение

Следующие шаги решили проблему для меня:

  1. использование hg debugsetparents заменить поврежденный родительский номер ревизии 893e15ecb5b4 с правильным, я обновил до использования unshelve
  2. Поскольку вышесказанное оставило меня в состоянии, когда Mercurial забыл все локальные изменения, мне пришлось использовать hg manifest | tr '\n' '\0' | xargs -0 touch чтобы он снова заметил любые локальные изменения.
  3. Отложенные изменения могут быть восстановлены с помощью patch -p1 < .hg/shelved/default.patchкоторый в моем случае сделал именно то, что hg unshelve должен был сделать для меня в первую очередь.
Другие вопросы по тегам