2010-08-11 5 views
20

Ich arbeite an einem Live-Server. Ich habe aktualisiert, um zu kippen, und es hat Probleme verursacht: Ich muss zu einem bestimmten changeset (388) zurückkehren, wo die Dinge in Ordnung waren.Mercurial: Wie kann ich zu einer bestimmten Revision zurückkehren?

Ich habe keine Änderungen von irgendwelchen Wert auf dem Server, die lokale Änderung setzt überhaupt keine Rolle. In der Tat möchte ich eigentlich lokale zufällige Änderungen oder Zusammenführungen töten, um Dinge nicht zu verwechseln.

Wie kann ich zu einem bestimmten Changeset zurückkehren und lokale Änderungen unterdrücken? Ist es etwas mit dem zu tun:

hg revert 

---- UPDATE ---

Um zu klären, was ich möchte zurückkehren zu tun ist, zunächst alles lokal 388 bis ChangeSet, und dann dafür sorgen, dass meine lokalen Repo ist in einem solchen Zustand, dass, wenn ich

tun
hg status 

ich keine Ausgabe erhalten. Ansonsten habe ich das unangenehme Gefühl, dass es beim Umgang mit dem Tipp Konflikte geben wird, die ich vermeiden möchte, weil die lokalen Veränderungen keinen Wert haben.

---- --- UPDATE

Für sonst jemand in dieser Situation, was es für mich schließlich festgelegt war:

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

, dass alle Ihre lokalen Änderungen töten, so gehen Sie mit Vorsicht (aber das wollte ich in diesem Fall).

+0

Nur ein Tipp: Klicken Sie auf 'hg help revert', um Informationen zum Zurücksetzen zu erhalten. Dies funktioniert auch mit anderen Befehlen ('hg help [Befehlsname hier]'). – derekerdmann

Antwort

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 

Es gibt auch eine wunderbar Purge extension. Sehr solide Sachen, es löscht alle nicht verfolgten Dateien aus dem Arbeitsverzeichnis.

+0

Ah - um den Zustand zu erreichen, den ich im obigen Update beschrieben habe, muss ich entweder alle lokalen Dateien löschen, oder ich muss die Bereinigungserweiterung verwenden? macht Sinn ... – AP257

+0

Dieser Fehler wurde mit rm -rf dir und hg clone/hg update 388 behoben, wie du vorgeschlagen hast. Ich dachte es sei klar, dass ich alles ablegen wollte, aber anscheinend nicht aus den anderen Kommentaren ..! Danke für Ihre Hilfe! – AP257

17

Verwenden Sie einfach den folgenden Befehl, um zu einer Revision zu gelangen.

hg revert -r REV 

Es steht im Konflikt mit --all.

Um alle lokalen Änderungen zu beenden, sollte --all sollte funktionieren.

hg revert --all 

nicht rollback Verwenden. Es ist ein irreversibles Verfahren, daher sollte mit Vorsicht verwendet werden.

EDIT

Sie mit --clean Option aktualisieren können. Dadurch werden nicht festgeschriebene Änderungen verworfen. Und dann auf einige Changeset aktualisieren.

+0

hg zurück --all -r 388 hat gearbeitet - danke! Wie auch immer, der hg-Status zeigt immer noch einige Unterschiede zwischen dem lokalen und dem entfernten Repository, wegen all dem, was ich getan habe. Gibt es eine Möglichkeit, alle lokalen Changesets zu löschen? – AP257

+0

Sie können lokale Changesets nicht löschen. Ich würde das Repo vom Server klonen und dann Update 388 auf Ihre gewünschte Revision aktualisieren. – Valentin

+1

@ AP257: Sie müssen ** nicht zurücksetzen **. Sie müssen ** updaten **, da @jk antwortet – zerkms

5

Ich glaube nicht, dass es wirklich klar ist, was Sie wollen, aber meine Interpretation wäre hg update -C -rev 388, aber Sie könnten genauso gut nach der Rückkehr sein, oder möglicherweise (unwahrscheinlich) sogar Rollback. meine Antwort auf this question gives a good difference between update and revert

Sie wirklich trainieren müssen, was Sie in der Arbeitskopie sehen wollen und was Sie den Zustand der Geschichte sein wollen wie zwischen ihnen wählen

+0

seit es nicht klar war: Ich wollte die Arbeitskopie Update 388 sein, und der Verlauf vollständig leer sein. – AP257

+1

Geschichte und Status sind zwei verschiedene Dinge. Sie können auf Rev 388 mit Rev 389 und 390 in der Geschichte, aber ohne lokale Änderungen sein, so dass der Status leer ist. –

Verwandte Themen