Ein Rollback auf eine alte revision in Mercurial (wie git reset)
Git, kann ich wegwerfen, eine falsche oder unbeabsichtigte Begehen mit einem Befehl wie
git reset --soft HEAD^
die setzt den current-Zweig (wie master
) um die aktuelle revision der übergeordneten commit HEAD^
ohne Sie zu berühren die arbeiten von Bäumen, die Sie ersetzen können --soft
mit --hard
wenn Sie wollen, um zu verwischen die arbeiten Baum als gut.
Zusätzlich, wenn ich wollen, um loszuwerden, der mehr als einen commit, kann ich mit einem Befehl wie
git reset --hard 53b94d0
das bringt mich wieder genau zu Begehen 53b94d0, als hätte ich etwas noch nie begangen, dass nach.
Was ist der Mercurial (hg) äquivalent?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl Mercurial keine einfache alternative und scheut die Idee änderbarer Geschichte, es gibt ein paar Wege, etwas zu erreichen in der Nähe. In diesem post werde ich skizzieren, ein paar von Ihnen.
hg rollback
Wenn Sie ausdrücklich, dass zum Rückgängigmachen der letzten commit, die Sie verwenden können:
wird die übergabe rückgängig (das berührt nicht die Arbeits-Baum – Sie sollten in der Lage sein zu Folgen Sie es mit einem
hg revert --all
oderhg update -C
wenn Sie zurücksetzen möchten die gesamte Arbeits-Verzeichnis).hg clone -r
Angenommen, Sie möchten zum zurücksetzen Ihres repository namens
giraffe
revision 77182fb7451f. Wenn Siecd
in das übergeordnete Verzeichnis, und führen Sie:dann werden Sie am Ende mit neuen-giraffe, ein repository revision 77182fb7451f. (Die
cp
ist notwendig, um sicherzustellen, dass neue-giraffepaths
(wie git ' s "Fernbedienungen") korrekt verweisen auf die Herkunft repo-statt dergiraffe
Ordner, wie es wäre, standardmäßig.)Dies ist schneller als recloning aus dem internet, weil es kopiert nur die Dateien, die lokal auf Ihrer Festplatte (und auf vielen Systemen, hard-links, Sie sparen noch mehr Zeit und Raum), kann aber wirklich zeitaufwendig, wenn das repository ist groß.
hg strip
Wenn Sie wollen mehr tun, komplizierte Dinge mit ändern der commit-Historie (das ist so etwas verpönt in der hg-Welt, durch die Art und Weise), aktivieren Sie zuerst die Mercurial Queues-Erweiterung durch hinzufügen der folgenden Zeilen in Ihre
.hgrc
(es gibt keine Notwendigkeit, geben Sie einen Pfad nach dem Gleichheitszeichen):Dieser gibt Ihnen (neben anderen nützlichen Dingen) die
hg strip
Befehl, um vollständig zu entfernen ein änderungssatz-und alle seine Nachkommen aus einem repository. So können Sie mit einem Befehl wie:wenn 1cc72d33ea76 ist die erste "schlechte" änderungen im repository, die Sie entfernen möchten.
Leider ist es oft schwer zu entfernen, genau der richtige änderungsmengen anzuzeigen, die mit dieser Methode und es ist alles zu einfach, um am Ende mit mehreren Köpfen (die Sie anzeigen können, mithilfe
hg heads
), erfordern mühsame wiederholte Anwendung vonhg strip
bevor Sie bekommen können, wo Sie möchten, ohne dass zusätzliche Köpfe.hg-Streifen mit revsets
Mit hg revsets löschen Sie alle Vorfahren von
.
(der aktuellen Version), die nicht Vorfahren der revision, die Sie wiederherstellen möchten, verwenden Sie einen Befehl wie:Stellen Sie sicher, dass zuerst ausführen:
die Ihnen zeigen, all die änderungen, die
hg strip
entfernen, also, können Sie sicherstellen, dass Sie nicht irreparabel Schaden Ihrem commit-Geschichte (da hat man backups... richtig?).