Ich habe die Arbeit an einem Feature-Zweig beendet feature-x
. Ich möchte die Ergebnisse wieder in der default
Verzweigung zusammenführen und schließen feature-x
, um sie in der Ausgabe von zu entfernen hg branches
.
Ich habe mir das folgende Szenario ausgedacht, aber es gibt einige Probleme:
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
Der feature-x
Zweig (changests 40
- 41
) ist also geschlossen, aber es gibt einen neuen Kopf , den Änderungssatz für den schließenden Zweig 44
, der hg heads
jedes Mal aufgelistet wird:
$ hg log ...
o 44 Closed branch feature-x
|
| @ 43 merge
|/|
| o 42 Changeset C
| |
o | 41 Changeset 2
| |
o | 40 Changeset 1
|/
o 39 Changeset B
|
o 38 Changeset A
|
Update : Es scheint, dass Mercurial seit Version 1.5 keine Köpfe geschlossener Zweige mehr in der Ausgabe von hg heads
anzeigt.
Ist es möglich, einen zusammengeführten Zweig zu schließen, ohne einen weiteren Kopf zu hinterlassen? Gibt es eine korrektere Möglichkeit, einen Feature-Zweig zu schließen?
Verwandte Fragen:
default
ohne sie zu "schließen". Es führte zu 0 neuen Köpfen, aber solche Zweige waren fürhg branches
immer sichtbar (als inaktive Zweige).Antworten:
Eine Möglichkeit besteht darin, zusammengeführte Feature-Zweige offen (und inaktiv) zu lassen:
Eine andere Möglichkeit besteht darin, einen Feature-Zweig vor dem Zusammenführen mit einem zusätzlichen Commit zu schließen:
Der erste ist einfacher, hinterlässt aber einen offenen Zweig. Der zweite hinterlässt keine offenen Köpfe / Zweige, erfordert jedoch einen weiteren zusätzlichen Commit. Man kann das letzte tatsächliche Commit für den Feature-Zweig mit diesem zusätzlichen Commit kombinieren
--close-branch
, aber man sollte im Voraus wissen, welches Commit das letzte sein wird.Update : Seit Mercurial 1.5 können Sie den Zweig jederzeit schließen, sodass er nicht mehr in beiden
hg branches
undhg heads
nicht mehr angezeigt wird. Das einzige, was Sie möglicherweise ärgern könnte, ist, dass das Revisionsdiagramm technisch noch eine weitere Revision ohne Kinder enthält.Update 2 : Seit Mercurial 1.8 sind Lesezeichen zu einem Kernmerkmal von Mercurial geworden. Lesezeichen sind für die Verzweigung bequemer als benannte Verzweigungen. Siehe auch diese Frage:
quelle
Bookmarks are more convenient for branching than named branches
. Hg-Lesezeichen sind nicht dasselbe wie Git-Zweige. Sie sind voll von vielen Randfällen, die sie als Feature-Zweige ungeeignet machen. Beispiel: Wenn Sie ein Repository klonen, erhalten Sie das neueste Commit in derdefault
Verzweigung. Wenn Sie Lesezeichen verwenden, entspricht dieser Änderungssatz einem zufälligen (instabilen) Lesezeichen. Wenn Sie benannte Zweige verwenden, erhalten Sie das neueste Commit im stabilen / Standardzweig, was normalerweise gewünscht wird. Lesezeichen werden eines Tages dort ankommen, aber sie sind noch nicht da.abort: push creates new remote branches:
. Was hätte ich falsch machen können?Imho gibt es zwei Fälle für Filialen, deren Schließung vergessen wurde
Fall 1: Zweig wurde nicht in den Standard zusammengeführt
In diesem Fall aktualisiere ich den Zweig und führe ein weiteres Commit mit --close-branch durch. Leider wählt dies den Zweig zum neuen Tipp. Bevor ich ihn an andere Klone weitergebe, stelle ich sicher, dass der echte Tipp einige weitere Änderungen und andere erhält Sei nicht verwirrt über diesen seltsamen Tipp.
Fall 2: Zweig wurde in Standard zusammengeführt
Dieser Fall unterscheidet sich nicht wesentlich von Fall 1 und kann gelöst werden, indem die Schritte für Fall 1 und zwei weitere Schritte reproduziert werden.
In diesem Fall aktualisiere ich das Zweig-Änderungsset, führe ein weiteres Commit mit --close-branch durch und füge das neue Änderungsset, das zum Tipp wurde, zum Standard zusammen. Die letzte Operation erstellt einen neuen Tipp, der sich im Standardzweig befindet - HOORAY!
Hoffe das hilft zukünftigen Lesern.
quelle
hg help ci
wird es Ihnen erklären.BEARBEITEN autsch, zu spät ... Ich weiß, dass Sie Ihren Kommentar gelesen haben, der besagt, dass Sie das Feature-x-Änderungsset beibehalten möchten, sodass der Klonierungsansatz hier nicht funktioniert.
Ich werde die Antwort hier immer noch zulassen, denn sie kann anderen helfen.
Wenn Sie "Feature X" vollständig entfernen möchten, weil es beispielsweise nicht funktioniert hat, können Sie klonen. Dies ist eine der im Artikel erläuterten Methoden, die funktioniert und speziell über Köpfe spricht.
Soweit ich weiß, haben Sie dies und möchten den "feature-x" -Kopf ein für alle Mal loswerden:
Also machst du das:
Und Sie werden Folgendes haben, und Sie werden sehen, dass Feature-x tatsächlich weg ist:
Ich habe vielleicht falsch verstanden, was Sie wollten, aber bitte nicht modifizieren, ich habe mir Zeit genommen, Ihren Anwendungsfall zu reproduzieren :)
quelle
Es ist seltsam, dass noch niemand die robusteste Methode zum Schließen von Feature-Zweigen vorgeschlagen hat ... Sie können Merge Commit einfach mit dem Flag --close-branch kombinieren (dh geänderte Dateien festschreiben und den Zweig gleichzeitig schließen):
Das ist also alles. Niemand extra Kopf auf Revgraph. Kein zusätzliches Commit.
quelle
merge
Befehl ausgeben, sollten Siehg branch
überprüfen, ob der Zweigstellenname der Zusammenführung derjenige ist, den Sie offen halten möchten.