Question

J'ai fini de travailler sur une branche de fonction feature-x. Je veux fusionner résultats à la branche default et feature-x près afin de se débarrasser de celui-ci dans la sortie de hg branches.

Je suis venu avec le scénario suivant, mais il a quelques problèmes:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Ainsi, la branche feature-x (changests 40-41) est fermé, mais il y a une nouvelle tête , la branche fermeture changeset 44, qui sera listé dans hg heads chaque fois:

$ 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
|

Mise à jour :. Il semble que depuis la version 1.5 Mercurial ne montre pas de branches fermées tête dans la sortie de hg heads plus

Est-il possible de fermer une succursale fusionnée sans laisser une plus tête? Y at-il de façon plus correcte de fermer une succursale de fonction?

Questions connexes:

Était-ce utile?

La solution

Une façon est de simplement laisser les branches fonctionnelles fusionnées ouverte (et inactive):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

Une autre façon est de fermer une branche de fonction avant de fusionner en utilisant un supplément commettras:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

La première est plus simple, mais il laisse une branche ouverte. La seconde ne laisse pas de têtes / branches ouvertes, mais il a besoin d'un plus commettre auxiliaire. On peut combiner la dernière réelle à la commettras branche de fonctionnalité avec ce supplémentaire en utilisant --close-branch commettre, mais il faut savoir à l'avance qui commit sera le dernier.

Mise à jour : Depuis Mercurial 1.5, vous pouvez fermer la branche à tout moment afin de ne pas apparaître dans les deux hg branches et hg heads plus. La seule chose qui pourrait vous agacer est que techniquement le graphique de révision aura encore une autre révision sans childen.

Mise à jour 2 : Depuis Mercurial 1.8 signets sont devenus une caractéristique essentielle de Mercurial. Les signets sont plus pratique pour le branchement que les branches nommées. Voir aussi cette question:

Autres conseils

IMHO il y a deux cas pour les branches qui ont été oublié de fermer

Cas n ° 1:  branche n'a pas été absorbée par défaut

dans ce cas, mettre à jour à la branche et faire une autre branche avec commettras --close, ce unfortunatly choisit la branche pour devenir la nouvelle pointe et donc avant de le pousser à d'autres clones je faire en sorte que la pointe réelle reçoit un peu plus les changements et les autres ne reçoivent pas confus au sujet de cette astuce étrange.

hg up myBranch
hg commit --close-branch

Cas n ° 2:  branche a été absorbée par défaut

Ce cas est pas très différent du cas 1 et il peut être résolu en reproduisant les étapes pour le cas 1 et deux supplémentaires.

dans ce cas, mise à jour vers la changeset branche, faire un autre engagement avec branche --close et fusionner le nouveau changeset qui est devenu la pointe en défaut. la dernière opération crée une nouvelle astuce qui est dans la branche par défaut - HOORAY

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

Espérons que cela aide les lecteurs à venir.

EDIT aïe, trop tard ... Je sais lire votre commentaire indiquant que vous voulez conserver la fonctionnalité x changeset autour, donc l'approche de clonage ne fonctionne pas ici.

Je vais quand même laisser la réponse ici car cela pourrait aider les autres.

Si vous voulez vous débarrasser complètement de « fonction X », parce que, par exemple, cela n'a pas fonctionné, vous pouvez cloner. Ceci est l'une des méthode expliquée dans l'article et il fonctionne, et il parle spécifiquement sur les têtes.

Pour autant que je comprends que vous avez cela et voulez vous débarrasser de la « fonction-x » tête une fois pour toutes:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Alors vous faites ceci:

hg clone . ../cleanedrepo --rev 7

Et vous avez ce qui suit, et vous verrez cette fonction-x est en effet disparu:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

je l'ai mal compris ce que vous vouliez, mais s'il vous plaît ne mod pas vers le bas, je pris le temps de reproduire votre cas d'utilisation:)

Il est étrange, que personne n'a encore suggéré la manière la plus robuste de la fermeture d'une des branches de fonction ... Vous pouvez simplement combiner commit de fusion avec le drapeau-branche --close (à savoir valider les fichiers modifiés et fermer la branche simultanément):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

Alors, voilà tout. Personne ne tête supplémentaire sur revgraph. Pas supplémentaire commettras.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top