Réponses:
Mettez à jour la stiging
branche 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 v3
mise à jour vers la nouvelle v3
branche, comme vous le vouliez.
stiging
avant de vous bifurquer, vous n'obtenez pas une "extrémité lâche"
Pour les futurs lecteurs: Avec l' rebase
extension, vous pouvez créer une nouvelle branche avec le même parent que stiging
et 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 stiging
n'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 stiging
comprend des fusions avec d' autres branches, je pense que cela va les préserver, aussi longtemps que staging
et stiging
avoir 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 rebase
documentation). À 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, rebase
refusera 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 convert
place.
--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 --dest
valeur 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}