J'ai fini de travailler sur une branche de fonctionnalité feature-x
. Je veux fusionner les résultats dans la default
branche et fermer feature-x
afin de m'en débarrasser dans la sortie de hg branches
.
J'ai trouvé 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 feature-x
branche (modifications 40
- 41
) est fermée, mais il y a une nouvelle tête , le changement de branche de fermeture 44
, qui sera répertorié à 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 plus les têtes de branches fermées dans la sortie de hg heads
.
Est-il possible de fermer une branche fusionnée sans laisser une tête de plus? Existe-t-il un moyen plus correct de fermer une branche de fonctionnalité?
Questions connexes:
default
sans les "fermer". Il en est résulté 0 nouvelles têtes mais de telles branches étaient visibles pourhg branches
toujours (sous forme de branches inactives).Réponses:
Une façon consiste simplement à laisser les branches de fonctionnalités fusionnées ouvertes (et inactives):
Une autre façon consiste à fermer une branche de fonctionnalité avant de fusionner à l'aide d'un commit supplémentaire:
Le premier est plus simple, mais il laisse une branche ouverte. La seconde ne laisse aucune tête / branche ouverte, mais elle nécessite un commit auxiliaire supplémentaire. On peut combiner le dernier commit réel à la branche de fonctionnalité avec ce commit supplémentaire en utilisant
--close-branch
, mais il faut savoir à l'avance quel 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
ethg heads
plus. La seule chose qui pourrait éventuellement vous ennuyer est que techniquement le graphique de révision aura toujours une révision de plus sans childen.Mise à jour 2 : depuis Mercurial 1.8, les signets sont devenus une fonctionnalité centrale de Mercurial. Les signets sont plus pratiques pour la création de branches que les branches nommées. Voir aussi cette question:
la source
Bookmarks are more convenient for branching than named branches
. Les signets Hg ne sont pas la même chose que les branches Git. Ils sont pleins de nombreux cas de bord qui les rendent inappropriés comme branches de fonctionnalité. Par exemple: lorsque vous clonez un référentiel, vous vous retrouvez avec le dernier commit de ladefault
branche. Si vous utilisez des signets, cet ensemble de modifications correspond à un signet aléatoire (instable). Si vous utilisez des branches nommées, vous obtiendrez le dernier commit dans la branche stable / par défaut, qui est généralement ce que vous voulez. Les signets y arriveront un jour, mais ils ne sont pas encore là.abort: push creates new remote branches:
. Qu'est-ce que j'aurais pu faire de mal?à mon humble avis, il y a deux cas pour les branches qui ont été oubliés de fermer
Cas 1: la branche n'a pas été fusionnée avec la valeur par défaut
dans ce cas, je mets à jour la branche et fais un autre commit avec --close-branch, malheureusement, cela choisit la branche pour devenir la nouvelle astuce et donc avant de la pousser vers d'autres clones, je m'assure que la vraie astuce reçoit encore plus de changements et d'autres ne vous trompez pas sur cette étrange astuce.
Cas 2: la branche a été fusionnée en défaut
Ce cas n'est pas très différent du cas 1 et il peut être résolu en reproduisant les étapes du cas 1 et deux étapes supplémentaires.
dans ce cas, je mets à jour l'ensemble de modifications de branche, fais un autre commit avec --close-branch et fusionne le nouvel ensemble de modifications qui est devenu la pointe par défaut. la dernière opération crée une nouvelle astuce qui se trouve dans la branche par défaut - HOORAY!
J'espère que cela aidera les futurs lecteurs.
la source
hg help ci
l'expliquera.EDIT aïe, trop tard ... Je sais que vous avez lu votre commentaire indiquant que vous souhaitez conserver le jeu de modifications Feature-X, donc l'approche de clonage ici ne fonctionne pas.
Je laisserai toujours la réponse ici car cela pourrait aider les autres.
Si vous voulez vous débarrasser complètement de la "fonctionnalité X", parce que, par exemple, cela n'a pas fonctionné, vous pouvez cloner. C'est l'une des méthodes expliquées dans l'article et elle fonctionne, et elle parle spécifiquement des têtes.
Pour autant que je sache, vous avez cela et que vous voulez vous débarrasser de la tête "feature-x" une fois pour toutes:
Vous faites donc ceci:
Et vous aurez ce qui suit, et vous verrez que la fonction-x a bel et bien disparu:
J'ai peut-être mal compris ce que vous vouliez, mais ne modifiez pas, j'ai pris le temps de reproduire votre cas d'utilisation:)
la source
Il est étrange que personne n'ait encore suggéré la manière la plus robuste de fermer une branche de fonctionnalités ... Vous pouvez simplement combiner la validation de fusion avec le drapeau --close-branch (c'est-à-dire valider les fichiers modifiés et fermer la branche simultanément):
Voilà, c'est tout. Aucune tête supplémentaire sur revgraph. Aucun engagement supplémentaire.
la source
merge
commande, il peut être judicieuxhg branch
de vérifier que le nom de branche de la fusion est bien celui que vous souhaitez conserver ouvert.