Réponses:
Mettez à jour la stigingbranche et créez-en une nouvelle. Fermez ensuite l'ancienne branche.
En résumé:
hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch
--force. Par exemple: hg branch --force v3. Cela se traduira par une hg update v3mise à jour vers la nouvelle v3branche, comme vous le vouliez.
stigingavant de vous bifurquer, vous n'obtenez pas une "extrémité lâche"
Pour les futurs lecteurs: Avec l' rebaseextension, vous pouvez créer une nouvelle branche avec le même parent que stiginget y déplacer tout l'historique de la branche, comme ceci:
hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging
Cela suppose qu'il stigingn'a qu'un seul parent. Bien sûr, vous pouvez simplement utiliser des numéros de révision explicites à la place.
Note 1: Si la branche stigingcomprend des fusions avec d' autres branches, je pense que cela va les préserver, aussi longtemps que staginget stigingavoir le même parent. Mais je reverrais certainement.
Remarque 2: puisque cela modifie l'historique, l'ancienne branche ne disparaîtra pas simplement des référentiels clonés (voir la rebasedocumentation). À moins que tout le monde ne puisse cloner à nouveau, cela pourrait ne pas être une solution très pratique pour un grand groupe.
Note3 / Edit (gracieuseté de @JasonRCoombs): Maintenant que les phases sont standard dans mercurial, rebaserefusera de modifier les changesets qui ont déjà été poussés. Soit le tromper en changeant la phase en brouillon (avec hg phases), soit laisser l'ancienne branche rester où elle est, et juste faire une copie correctement nommée (par exemple, avec `hg rebase --keep ').
hg convertplace.
--keepà la commande rebase, qui copiera au lieu de déplacer les modifications.
abort: can't rebase immutable changeset 11b1e2b7dc4f. Notez que j'ai greffé des changesets d'une autre branche dans celle-ci. En plus de cela, il est divisé et fusionné gratuitement.
.pour votre --destvaleur et le rebase prendra automatiquement le nouveau nom de la branche.
Si vous avez des ensembles de modifications, vous devrez utiliser l' extension convert avec une branche pour la renommer. Tout le monde devra alors cloner le nouveau référentiel ou retirer l'ancienne branche.
Cela modifie l'historique et n'est destiné qu'aux utilisateurs avancés de Mercurial. Ne faites pas cela si vous ne savez pas ce que cela signifie.
Si le stigeage est local uniquement, vous pouvez le remplacer par un staging avec une combinaison de greffe et de bande . Commencez par mettre à jour l'ensemble de modifications de l'ancêtre où la stigmatisation avait divergé. Créez la branche intermédiaire et greffez chaque validation de la stigmatisation à la mise en scène. La mise en scène devrait maintenant être une copie de la stigmatisation. Enfin, détruisez les stigmates en supprimant son premier commit.
hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch
hg graft {first changeset in stiging}..{stiging head}