Ich bin ein Git-Benutzer, der versucht, Mercurial zu verwenden.
hg backout
Folgendes ist passiert: Ich habe ein Änderungsset erstellt, das ich zurücksetzen wollte. Das hat einen neuen Kopf erzeugt, also hat hg mich angewiesen, ihn zusammenzuführen (zurück zu "Standard", nehme ich an). Nach dem Zusammenschluss wurde mir gesagt, dass ich mich noch festlegen musste. Dann bemerkte ich etwas, was ich falsch gemacht hatte, als ich einen Konflikt in der Zusammenführung löste, und entschied hg backout
, dass ich alles wie zuvor haben wollte , das heißt, ich möchte, dass diese nicht festgeschriebene Zusammenführung verschwindet. Auf Git wäre dieses nicht festgeschriebene Zeug im Index und ich würde es nur tun git reset --hard HEAD
, um es zu löschen, aber nach dem, was ich gelesen habe, existiert der Index auf Mercurial nicht. Wie kann ich mich zurückziehen?
Antworten:
Wenn Sie sich noch nicht verpflichtet haben und es so klingt, als hätten Sie es noch nicht getan, können Sie die gesamte Zusammenführungsarbeit rückgängig machen
hg update --clean
.In neueren Mercurials gibt es jedoch einen praktischen Befehl zum erneuten Zusammenführen einer einzelnen Datei :
hg resolve path/to/file.ext
. Aus demhg help resolve
:quelle
hg up -C
, aber das "Backed Out" -Commit befindet sich immer noch an der Spitze meines Zweigs. Ich dachte, dies wäre ein "Geisterzweig", der mit dem erstellt wurdebackout
, aber läufthg branch
zurückdefault
, also bin ich doch im Hauptzweig?default
. Dies ist eine ganz normale Situation in Quecksilber und 'hg heads
ist der Befehl, mit dem Sie es entdecken / verstehen. Wenn Siehg backout
es ausgeführt haben, "Übernehmen Sie die zurückgesetzten Änderungen als neues Änderungsset", damit ein neues Änderungsset erstellt wird, das ohne heldenhaften Aufwand nicht verschwindet. Jetzt haben Sie zwei Köpfe in dem Zweig mit dem Namen default. Nachdem Siehg merge
(und es festgeschrieben) haben, befinden Sie sich wieder in einem Kopf des Zweigs mit dem Namen default.Das ist nah:
hg update --clean
quelle
git reset --hard
. Ergo - mercurial ist dummVon git Befehle:
sind gleich
quelle
git reset --hard
löscht keine nicht verfolgten Dateien.hg update --clean 18:8e139889ff02
sagt "2 Dateien aktualisiert", aber wenn ich mir das Protokoll ansehe, ist es immer noch da, wo es war. UPD : Das heißt, es hat die Dateien auf die Revision zurückgesetzt. Welches ist jedoch nur die Hälfte desgit reset --hard
Verhaltens.Auf der GitConcepts- Seite des Hg-Handbuchs wird erläutert, wie viele Aktionen ausgeführt
git
werden, mit denen Benutzer in Mercurial vertraut sind.Mercurial hat kein eingebautes
git reset --hard
Verhalten. Diestrip
Erweiterung bietet jedoch einenstrip
Befehl, der dies tut. Zur Verwendung aktivierenstrip
Sie zuerst in Ihrer~/.hgrc
Datei ::Hinweis: Diese Erweiterung wird in Mercurial 2.8 neu ausgeliefert. Frühere Versionen lieferten den
strip
Befehl in dermq
Erweiterung .Jetzt können Sie Befehle wie
hg strip
oder sogar ausführenhg help strip
. Geben Sie zum Ändern eines Änderungssatzes und aller untergeordneten Elemente einfach diesen Änderungssatz als Argument an anhg strip
. Um beispielsweise das zuletzt vorgenommene Commit zu entfernen (nachdem Sie Befehle verwendet haben, diehg rollback
gemeldet haben, dass keine Transaktion mehr zurückgesetzt werden muss), können Sie dietip
Revision entfernen . Jedes Mal, wenn Sie diesen Befehl ausführen, wird eine weitere Revision entfernt.hg strip
Die Handlungen sollten als irreversibel angesehen werden. Unbekannte Benutzer sollten vor der Verwendung Backups ihrer Repositorys erstellen.Mit der Revsets-Syntax gebe ich beispielsweise an, dass ich alle Commits entfernen möchte, die dazu führen, dass beim Ausführen zusätzliche Köpfe angezeigt werden
hg heads
. Wenn Sie im folgenden Ausdruck eine bestimmte Revision angebentip
, wird alles im aktuellen Zweig, der kein Vorfahr der von Ihnen ausgewählten Revision ist, gekürzt. Dies scheint dem gewünschten Verhalten am nächsten zu kommen, wenn ich den Befehl erteilegit reset --hard HEAD
.quelle
strip
Erweiterung für den Fall, dass man denhg strip
Befehl nur explizit möchte . Mit using werden auchmq
verschiedene andere Patch-Verwaltungsbefehle hinzugefügt.