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