2015-05-13 3 views
5

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

Как только моя работа над другой головой была зафиксирована, я переключился обратно в голову, на которой я изначально использовал 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 версию 2.8.2 на Ubuntu 14.04.

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

ответ

6

Следующих шагов решить проблемы для меня:

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

'hg debugrebuildstate', вероятно, то, что вам нужно вместо # 2. –

+0

@MarkTolonen Потому что это проще, чем то, что я сделал? Или потому, что будет дополнительная информация, которая может быть не синхронизирована? Если это будет позже, то какая информация будет не синхронизирована? – kasperd

+2

Это заставляет Mercurial восстанавливать свое внутреннее состояние, поэтому я думаю, что это более точно. Я получил совет от http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks/ –

Смежные вопросы