Ich habe eine Reihe von Änderungen vorgenommen, die ich in mein lokales Repository übernommen habe, die jedoch noch nicht übertragen wurden. Da ein Feature länger dauert als erwartet, möchte ich diese Änderungen vor dem Push auf einen benannten Zweig übertragen. Wie kann ich das machen?
124
Antworten:
Wie von Mark vorgeschlagen, ist die MqExtension eine Lösung für Ihr Problem. Meiner Meinung nach ist es einfacher, die Rebase-Erweiterung zu verwenden . Angenommen, Sie haben eine Geschichte wie diese:
Dies bedeutet, dass die Revision
0
die Basis ist, auf der Sie mit der Arbeit an Ihrer Funktion begonnen haben. Jetzt möchten Sie beispielsweise1-2
einen benannten Zweig überarbeitenmy-feature
. Aktualisieren Sie auf Revision0
und erstellen Sie diesen Zweig:Die Geschichte sieht jetzt so aus:
Verwenden Sie den
rebase
Befehl, um Revisionen1-2
auf Revision zu verschieben3
:Dies führt zu der folgenden Grafik:
Das war's ... Wie in den Kommentaren zu Marks Antwort erwähnt, ist es im Allgemeinen eine schlechte Idee, sich bereits umgedrückte Änderungssätze zu bewegen, es sei denn, Sie arbeiten in einem kleinen Team, in dem Sie in der Lage sind, Ihre Verlaufsmanipulation zu kommunizieren und durchzusetzen.
quelle
fold
Befehls der jetzt integrierten histedit- Erweiterung).hg log -G
( GraphlogExtension ). Ich habe einige Zeilen manuell entfernt, aber es hätte auch vollständig automatisch mit benutzerdefinierten Protokollstilen gerendert werden können .Sie können die MqExtension verwenden . Angenommen, die zu verschiebenden Änderungssätze sind die Revisionen 1-3:
quelle
Ich bevorzuge die hier beschriebene Patch-Lösung von Mark Tolonen
Was ich habe:
Was ich möchte:
mercurials Befehle:
Hier ist der Status meines lokalen Repositorys
Jetzt muss ich die Revisionen 1 2 und 3 aus meinem Standardzweig löschen. Sie können dies mit dem Befehl strip aus der Erweiterung von mq tun.
hg strip
Entfernt das Änderungsset und alle seine Nachkommen aus dem Repository.Aktivieren Sie die Erweiterung, indem Sie Ihrer Konfigurationsdatei (.hgrc oder Mercurial.ini) folgende Zeilen hinzufügen:
vim ~/.hgrc
und hinzufügen:Und jetzt entfernen Sie dieses Repository in Revision 1.
und hier sind wir
Hinweis: Änderungssätze sind unterschiedlich, aber Revisionen sind gleich
quelle
Für diejenigen, die GUI verwenden möchten
Tortoise Hg
->File
->Settings
und kreuzen Sie anrebase
.Starten Sie die Schildkröten-Benutzeroberfläche neu
Erstellen Sie einen neuen Zweig, in den Sie Änderungen verschieben. Klicken Sie auf den aktuellen Filialnamen -> wählen Sie
Open a new named branch
-> wählen Sie den Filialnamen.public
(z. B.draft
), fahren Sie mit Schritt 5 fort. (Wenn Änderungen bereits veröffentlicht wurden und Sie kein leitender Entwickler sind, sollten Sie mit einem älteren Mitarbeiter sprechen (einen Sündenbock holen), da Sie möglicherweise große Probleme haben Ich übernehme keine Verantwortung :)).Gehen Sie zu
View
->Show Console
(oder Ctrl+ L) und schreiben Sie in die Konsole.hg phase -f -d 2
Dabei ist 2 die niedrigste Version, die Sie in einen neuen Zweig verschieben.Gehen Sie zu Zweig und Revision (sollte die oberste Revision sein, wenn Sie Änderungen an einem neuen Zweig verschieben, der in Schritt 3 erstellt wurde.)
Right Mouse
->Update
Gehen Sie zu Zweig und Version, um die Änderungen von
Right Mouse
->Modify History
-> zu verschiebenRebase
Klicken Sie
Rebase
und beten Sie, dass es keine Konflikte gibt. Führen Sie diese zusammen, wenn Sie müssen.Push-Änderungen, an dieser Stelle sollten noch alle Revisionen sein
draft
.Gehen Sie zur obersten Revision in dem Zweig, in den Sie Änderungen verschoben haben
Right Mouse
->Change Phase to
->Public
.Hoffe das spart dir etwas Zeit.
quelle
public
mehr automatisch zu (zumindest für mich nicht).