2010-10-20 8 views
11

In der Antwort auf this question, Ry4an heißt es, dass "Changeset2 nicht gedrückt werden kann, ohne Changeset1 zu drücken".Gibt es in Mercurial (außer "Cherry picking") einen Weg, einen Changeset zu pushen, ohne auch Changesets zu verschieben, die mit einem anderen Kopf verbunden sind?

Dies ist sicherlich sinnvoll, wenn das Repository wie folgt aussieht:

+ Changeset2 
| 
+ Changeset1 
| 
+ Original 

aber es scheint nicht so viel Sinn in dem folgenden Szenario zu machen, das ist, was ich derzeit haben:

+ Changeset2 
| 
| + Changeset1 
|/
|/
+ Original 

Im Idealfall möchte ich in der Lage sein, Changeset2 zurück zu dem Repository zu pushen, von dem ich ursprünglich geklont habe. Mercurial scheint das nicht zu wollen. Es besteht darauf, dass ich auch Changeset 1 drücke ... was nicht erlaubt ist, da es einen neuen Kopf im ursprünglichen Repository erzeugen würde. Natürlich könnte ich "Cherry pick" oder einen Patch erstellen, der auf das Original-Repository angewendet wird, aber das scheint klobig zu sein. Fehle ich etwas?

Update: Ich hätte wahrscheinlich in meiner ersten Frage erwähnt, dass ich versuchte, die Operation von der TortoiseHg GUI durchzuführen. Als Niall C. in seiner Antwort korrekt identifiziert, erlaubte mir die Mercurial-Befehlszeile, das zu erreichen, was ich brauchte, aber ich wäre immer noch daran interessiert zu erfahren, ob es eine Möglichkeit gibt, die gleiche Operation über die GUI auszuführen.

+0

Ja, in dieser Frage war die Geschichte linear und meine Antwort war spezifisch dafür. Naill hat genau das, was du brauchst. –

+1

In Bezug auf Ihr Update gibt es eine Möglichkeit, dies in TortoiseHg zu tun, aber es kann nicht wirklich als Standardverhalten behandelt werden: Sie müssen manuell auswählen, welche Zweige bei jedem Drücken gedrückt werden sollen. Siehe http://stackoverflow.com/questions/2819760/ – StriplingWarrior

Antwort

11

Wenn Sie hg push ohne eine Befehlszeilenoption verwenden, versucht es, alle Änderungssätze in Ihrem lokalen Repository zu übertragen, die nicht im Remote-Repository vorhanden sind. Wenn Sie die Option -r/--rev verwenden, wird nur diese Revision und ihre Vorfahren verschoben. In Ihrem Fall würden Sie tun müssen:

hg push --rev Changeset2 

hg help push für weitere Informationen.

+0

Ausgezeichnet! Ich war mir sicher, dass ich etwas verpassen musste und das war es. –

+3

Check out Steve Losh '' hg Nudge' Befehl (http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/).Es ist die gleiche Idee, aber er hat einige nette Erklärungen und Arbeitsabläufe, die Sie damit verwenden können. – tghw

2

Für die UI-Liebhaber, die Bilder gefallen:

  1. In TortoiseHg Klick auf Detect outgoing changes to Taste. enter image description here

  2. Klicken Sie mit der rechten Maustaste auf die Revision, die Sie drücken möchten.

  3. Wählen Sie Push -> Push to Here. enter image description here

Ergebnis: Sie werden nur Revision schieben ausgewählt, anstatt alles.

Hoffe das spart Ihnen etwas Zeit.