2010-08-11 14 views
20

Sto lavorando su un server live. Ho aggiornato per suggerire e ha causato problemi: ho bisogno di tornare a un changeset particolare (388) dove le cose erano OK.Mercuriale: come ripristinare una revisione particolare?

Non ho nessuna modifica di alcun valore sul server, il changeset locale non ha alcuna importanza. In effetti I in realtà vuole uccidere eventuali modifiche accidentali locali o si fonde in modo da non confondere le cose.

Come ripristinare un determinato changeset e annullare eventuali modifiche locali? E 'qualcosa a che fare con:

hg revert 

---- UPDATE ---

Per chiarire, quello che vorrei fare è prima di tutto tornare a livello locale per changeset 388, e quindi garantire che il mio locale repo è in uno stato tale che quando faccio

hg status 

Non ottengo output. Altrimenti ho la brutta sensazione che quando estrarrò il suggerimento, ci saranno dei conflitti da affrontare, cosa che voglio evitare, perché i cambiamenti locali non hanno alcun valore.

---- UPDATE ---

Per chiunque altro in questa situazione, quello che alla fine ha risolto il tutto per me era:

rm -rf <repo_dir> 
hg clone http://repository 
hg update -r 388 

che ucciderà tutte le modifiche locali, in modo da procedere con cautela (ma è quello che volevo in questo caso).

+0

Solo un suggerimento: consultare "hg help revert' per la documentazione sul ripristino. Questo funziona anche con altri comandi ('hg help [comando nome qui]'). – derekerdmann

risposta

11
server: 
- .. 
- rev 386 
- rev 387 
- rev 388 
- rev 389 

clone to production 

-- testing stuff, it doesn't work! 
-- panic! 
-- rev 390 (in panic) 
-- rev 391 (in panic) 
-- cool down, thinking, need to go back to 388 
-- one way: hg update -C -rev 388 (to keep 390, 391) 
-- other way: rm -rf dir (to discard 390, 391) 
-- hg clone http://server/hg 
-- cd dir 
-- hg update 388 
-- testing, now works 

C'è anche una meraviglioso Purge extension. Roba molto solida, cancella tutti i file non tracciati dalla directory di lavoro.

+0

Ah: per ottenere lo stato che descrivo nell'aggiornamento precedente, è necessario eliminare tutti i file locali oppure è necessario utilizzare l'estensione Purge? ha senso ... – AP257

+0

Risolto questo problema usando rm -rf dir e hg clone/hg update 388, come suggerito. Ho pensato che fosse chiaro che volevo scartare tutto, ma apparentemente non dagli altri commenti ..! Grazie per l'aiuto! – AP257

17

Basta usare il comando seguente per ottenere una revisione.

hg revert -r REV 

È in conflitto con --all.

Per eliminare tutte le modifiche locali, --all dovrebbe funzionare.

hg revert --all 

Non utilizzare rollback. È una procedura irreversibile, quindi dovrebbe essere usata con cura.

EDIT

È possibile aggiornare con l'opzione --clean. Questo cancellerà qualsiasi cambiamento non eseguito. E quindi aggiornare ad alcuni changeset.

+0

hg ripristina --all -r 388 ha funzionato - grazie! Tuttavia, lo stato di hg mostra ancora una serie di differenze tra il repository locale e quello remoto, a causa di tutti gli errori e il panico che ho fatto. C'è un modo per cancellare tutti i changeset locali? – AP257

+0

Non è possibile eliminare i changeset locali. Clonerei il repository dal server e poi hg l'aggiornamento 388 alla revisione desiderata. – Valentin

+1

@ AP257: non è necessario ** revert **. Hai bisogno di ** aggiornare ** come @jk ha risposto – zerkms

5

Non penso che sia davvero chiaro cosa vuoi ma la mia interpretazione sarebbe hg update -C -rev 388 ma potresti ugualmente essere dopo il ripristino, o possibilmente (improbabile) anche il rollback. la mia risposta a this question gives a good difference between update and revert

si ha realmente bisogno di capire cosa si vuole vedere nella copia di lavoro e ciò che si vuole lo stato della storia ad essere come di scegliere tra di loro

+0

poiché non era chiaro: volevo che la copia di lavoro fosse l'aggiornamento 388 e che la cronologia fosse completamente vuota. – AP257

+1

La storia e lo stato sono due cose diverse. Puoi trovarti al rev 388, con rev 389 e 390 nella cronologia, ma senza modifiche locali quindi lo stato è vuoto. –

Problemi correlati