2013-04-17 13 views
9

Ich ausgestellt hg qnew ohne zu erkennen, dass es alle ausstehenden Änderungen in den Patch enthält. Ich würde das gerne wiederholen und nur bestimmte Änderungen mit hg qrecord auswählen. Wie kann ich qnew rückgängig machen?Wie rückgängig machen "hg qnew"?

Antwort

12

Ihre Antwort auf jeden Fall funktioniert - mit neuerem Mercurial Sie hg strip --keep verwenden können, tun den Importschritt zu vermeiden:

$ hg strip --keep . 
$ hg qdelete patch-name 

Das Flag --keep lässt Streifen die Arbeitskopie während der Arbeit ignorieren, dh es löscht die Festschreibung (wie hg qpop würde tun), aber es macht die Änderungen an den Dateien nicht rückgängig . Nach dem Entfernen haben Sie immer noch den Patch in Ihrer Serie (nicht angewendet) und Sie können ihn dann löschen.

2

Ich habe eine anwer here gefunden:

hg qpop 
hg import --no-commit .hg/patches/patch-name 
hg qdelete patch-name 

Bitte fügen Sie eine bessere Art und Weise, wenn Sie wissen.

Update: Basierend auf Aldo Antwort gibt es eine andere Art und Weise:

hg qnew test 
# We can undo the above qnew as: 
hg qrefresh -X '*' 
hg qpop -f 
hg qdelete test 
2

Wenn Sie nur die neuesten qnew Beibehaltung aller lokalen Änderungen rückgängig machen wollen, eine Option ist:

qcrefresh 123 
hg qpop -f 
hg qdelete <name of the patch> 

Beachten Sie, dass 123 nur eine zufällige Zeichenfolge ist: Sie sagen nur Mercurial umfassen die (hoffentlich nonexistsnt) 123 Datei im aktuellen Patch. Neuere Versionen von Mercurial Wenn Sie ein Problem melden, wird eine Warnung ausgegeben, dass die Datei 123 nicht existiert, aber genau das wollen wir hier.

Wenn Sie einige der Änderungen im aktuellen Pfad beibehalten möchten, können Sie den Befehl qcrefresh von crecordextension verwenden, mit dem Sie die Änderungen grafisch auswählen können, die im aktuellen Patch enthalten sein sollen. Sie müssen es von Bitbucket download, das Archiv extrahieren und konfigurieren Sie es in .hgrc:

[extensions] 
crecord = <path/to/crecord/package> 
+0

Diese Erweiterung sehr vielversprechend scheint, und als darcs Benutzer möchte ich auf diese Weise Änderungen interaktiv auszuwählen. Allerdings beantwortet es meine Frage nicht - ich musste "qnew" rückgängig machen, was schon passiert ist. –

+0

Wenn ich Ihre Frage gut verstehe, müssen Sie das 'qnew' nicht wirklich rückgängig machen: Sie können den' qcrefresh' Befehl direkt verwenden, um die Änderungen auszuschließen, die nicht enthalten sein sollten. Die ausgeschlossenen Änderungen bleiben als lokale Änderungen erhalten. Nach "qcrefresh" können Sie sie alle in einen neuen Patch mit 'qnew' einfügen oder sogar' qcrecord' verwenden, um nur eine Teilmenge davon auszuwählen. – Aldo

+0

Vielleicht verstehe ich einfach nicht, wie man die Erweiterung richtig benutzt. Könnten Sie bitte eine Reihe von Befehlen hinzufügen, die mit 'hg qnew' in einem modifizierten Repository beginnen, das endet, als ob' qnew' nie aufgerufen wurde? Ich habe versucht, dies mit 'qrefresh' vorher (was ich denke, macht das gleiche wie' qcrefresh', nur nicht interaktiv), aber ohne Erfolg. –

Verwandte Themen