2015-05-13 12 views
5

Ho utilizzato hg shelve in un repository, dove ho apportato alcune modifiche non completate perché avevo bisogno di passare a una testa diversa ed eseguire modifiche non correlate.Come posso riparare un repository rotto da hg unshelve?

Una volta eseguito il mio lavoro sull'altro capo, sono tornato alla testa su cui avevo originariamente utilizzato hg shelve e ho eseguito un comando hg unshelve. Questo è stato il risultato:

$ 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! 
$ 

Ho fatto eseguire hg head prima e dopo il comando unshelve e ho visto identiche uscite. Il commit 893e15ecb5b4 non è mai esistito, non ho idea di dove Mercurial l'abbia preso.

Nel caso sia pertinente, eseguo la versione 2.8.2 di Mercurial su Ubuntu 14.04.

Come posso ripristinare il repository in uno stato funzionante e in che modo è possibile ripristinare le modifiche di shelving?

risposta

6

I seguenti passi risolto i problemi per me:

  1. Usa hg debugsetparents per sostituire il genitore corrotto numero di revisione 893e15ecb5b4 con quella corretta avevo aggiornato alla prima di utilizzare unshelve
  2. Perché il sopra di me aveva lasciato in uno stato in cui Mercurial aveva dimenticato tutte le modifiche locali, ho dovuto usare hg manifest | tr '\n' '\0' | xargs -0 touch per far sì che notasse di nuovo eventuali modifiche locali.
  3. Le modifiche accantonate potrebbero essere ripristinate utilizzando patch -p1 < .hg/shelved/default.patch, che nel mio caso ha fatto esattamente quello che hg unshelve avrebbe dovuto fare per me in primo luogo.
+4

'hg debugrebuildstate' è probabilmente quello che serve invece del # 2. –

+0

@MarkTolonen Perché è più semplice di quello che ho fatto? O perché ci sarebbero informazioni aggiuntive che potrebbero essere fuori sincrono? Se è il più tardi, quali informazioni sarebbero fuori sincrono? – kasperd

+2

Costringe Mercurial a ricostruire il suo stato interno, quindi immagino sia più accurato. Ho ricevuto il suggerimento da http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks/ –

Problemi correlati