it-swarm.com.de

Wie setze ich --hard HEAD auf Mercurial zurück?

Ich bin ein Git-Benutzer, der versucht, Mercurial zu verwenden.

Folgendes ist passiert: Ich habe einen hg backout Für ein Änderungsset erstellt, das ich zurücksetzen wollte. Das erzeugte einen neuen Kopf, also wies mich hg an, zusammenzuführen (zurück zu "Standard", nehme ich an). Nach dem Zusammenschluss wurde mir mitgeteilt, dass ich immer noch einen Commit ausführen muss. Dann bemerkte ich etwas, was ich bei der Lösung eines Konflikts bei der Zusammenführung falsch gemacht hatte, und entschied, dass ich alles so haben wollte wie vor dem hg backout, Das heißt, ich möchte, dass diese unverbindliche Zusammenführung wegfällt. Auf Git wäre dieses nicht festgeschriebene Zeug im Index und ich würde einfach einen git reset --hard HEAD Tun, um es zu löschen, aber nach dem, was ich gelesen habe, existiert der Index auf Mercurial nicht. Wie mache ich das wieder rückgängig?

70
hsribei

Wenn Sie noch kein Commit ausgeführt haben und es sich so anhört, als hätten Sie es noch nicht getan, können Sie die gesamte Zusammenführungsarbeit mit hg update --clean Rückgängig machen.

In neueren Mercurial-Versionen gibt es jedoch einen praktischen Befehl zum erneuten Zusammenführen einer einzelnen Datei: hg resolve path/to/file.ext. Aus dem hg help resolve:

The available actions are: ...

 4) discard your current attempt(s) at resolving conflicts and

starten Sie die Zusammenführung von Grund auf neu: "hg resolve file ..." (oder "-a" für alle nicht aufgelösten Dateien)

87
Ry4an Brase

Das ist nah:

hg update --clean

21
sblom

Auf der Seite GitConcepts des HG-Handbuchs wird erklärt, wie viele Aktionen ausgeführt werden git, mit denen Benutzer in Mercurial vertraut sind.

Mercurial hat kein eingebautes git reset --hard - Verhalten. Die Erweiterung strip stellt jedoch einen Befehl strip bereit, der dies tut. Zur Verwendung aktivieren Sie zuerst strip in Ihrer ~/.hgrc - Datei ::

[extensions]
strip =

Hinweis: Diese Erweiterung wird neu in Mercurial 2.8 ausgeliefert. In früheren Versionen war der Befehl strip in der Erweiterung mq . enthalten.

Jetzt können Sie Befehle wie hg strip Oder sogar hg help strip Ausführen. Um ein Changeset und alle untergeordneten Elemente zu entfernen, geben Sie dieses Changeset einfach als Argument für hg strip An. Um beispielsweise die letzte Festschreibung zu entfernen, die Sie gerade durchgeführt haben (nachdem Sie Befehle verwendet haben, die dazu geführt haben, dass hg rollback Meldet, dass keine Transaktion mehr rückgängig gemacht werden muss), können Sie die Revision tip entfernen. Jedes Mal, wenn Sie diesen Befehl ausführen, wird eine andere Revision entfernt. Die Aktionen von hg strip Sollten als irreversibel angesehen werden. Unbekannte Benutzer sollten vor der Verwendung Sicherungskopien ihrer Repositorys erstellen.

$ hg strip tip

Beispiel: Mit revsets syntax gebe ich an, dass ich meine Commits entfernen möchte, die dazu führen, dass beim Ausführen von hg heads Zusätzliche Köpfe angezeigt werden. Wenn Sie im folgenden Ausdruck eine andere bestimmte Revision als tip angeben, wird alles im aktuellen Zweig, das kein Vorfahr der von Ihnen gewählten Revision ist, gekürzt. Dies scheint dem gewünschten Verhalten am nächsten zu sein, wenn ich den Befehl git reset --hard HEAD Absetze.

$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
11
binki

Von Git, Befehle:

git reset --hard     # reset to last commit    
git clean -df        # delete untracked files

sind gleich

hg update --clean    # reset to last commit  
hg purge             # delete untracked files
8