J’ai un certain nombre de modifications que j’ai validées dans mon référentiel local, mais qui n’ont pas encore été poussées. Étant donné que sur une fonctionnalité prend plus de temps que prévu, je souhaite échanger ces modifications sur une twig nommée avant de pousser. Comment puis-je faire ceci?
Comme suggéré par Mark, le MqExtension est une solution à votre problème. IMHO un stream de travail plus simple consiste à utiliser l’ extension de rebase . Supposons que vous ayez une histoire comme celle-ci:
@ changeset: 2:81b92083cb1d | tag: tip | summary: my new feature: edit file a | o changeset: 1:8bdc4508ac7b | summary: my new feature: add file b | o changeset: 0:d554afd54164 summary: initial
Cela signifie que la révision 0
est la base sur laquelle vous avez commencé à travailler sur votre fonctionnalité. Maintenant, vous voulez avoir des révisions 1-2
sur une twig nommée, disons my-feature
. Mettre à jour vers la révision 0
et créer cette twig:
$ hg up 0 $ hg branch my-feature $ hg ci -m "start new branch my-feature"
L’histoire ressemble maintenant à ceci:
@ changeset: 3:b5939750b911 | branch: my-feature | tag: tip | parent: 0:d554afd54164 | summary: start new branch my-feature | | o changeset: 2:81b92083cb1d | | summary: my new feature: edit file a | | | o changeset: 1:8bdc4508ac7b |/ summary: my new feature: add file b | o changeset: 0:d554afd54164 summary: initial
Utilisez la commande rebase
pour déplacer les révisions 1-2
sur la révision 3
:
$ hg rebase -s 1 -d 3
Cela se traduit par le graphique suivant:
@ changeset: 3:88a90f9bbde7 | branch: my-feature | tag: tip | summary: my new feature: edit file a | o changeset: 2:38f5adf2cf4b | branch: my-feature | summary: my new feature: add file b | o changeset: 1:b5939750b911 | branch: my-feature | summary: start new branch my-feature | o changeset: 0:d554afd54164 summary: initial
Ça y est … comme mentionné dans les commentaires de la réponse de Mark, il est généralement déconseillé de se déplacer sur des modifications déjà poussées, sauf si vous travaillez dans une petite équipe où vous pouvez communiquer et appliquer votre manipulation de l’historique.
Vous pouvez utiliser l’ extension MqExtension . Disons que les changesets à déplacer sont des révisions 1-3:
hg qimport -r 1:3 # convert revisions to patches hg qpop -a # remove all them from history hg branch new # start a new branch hg qpush -a # push them all back into history hg qfin -a # finalize the patches
Je préfère la solution de patch décrite ici par Mark Tolonen
Ce que j’ai:
hg log -G #default branch @ changeset: 3:cb292fcdbde1 | o changeset: 2:e746dceba503 | o changeset: 1:2d50c7ab6b8f | o changeset: 0:c22be856358b
Ce que je veux:
@ changeset: 3:0e85ae268e35 | branch: feature/my_feature | o changeset: 2:1450cb9ec349 | branch: feature/my_feature | o changeset: 1:7b9836f25f28 | branch: feature/my_feature | / | o changeset: 0:c22be856358b
commandes mercurials:
hg export -o feature.diff 1 2 3 hg update 0 hg branch feature/my_feature hg import feature.diff
Voici l’état de mon repository local
@ changeset: 6:0e85ae268e35 | branch: feature/my_feature | o changeset: 5:1450cb9ec349 | branch: feature/my_feature | o changeset: 4:7b9836f25f28 | branch: feature/my_feature | | o changeset: 3:cb292fcdbde1 | | | o changeset: 2:e746dceba503 | | | o changeset: 1:2d50c7ab6b8f |/ | o changeset: 0:c22be856358b
Maintenant, je dois supprimer les révisions 1 2 et 3 de ma twig par défaut. Vous pouvez le faire avec la commande ssortingp de l’extension mq. hg ssortingp
supprime le changeset et tous ses descendants du référentiel.
Activez l’extension en ajoutant les lignes suivantes à votre fichier de configuration (.hgrc ou Mercurial.ini):
vim ~/.hgrc
et ajoutez:
[extensions] mq =
Et maintenant, dépouillez ce repository sur la révision 1.
hg ssortingp 1
et nous voici
@ changeset: 3:0e85ae268e35 | branch: feature/my_feature | o changeset: 2:1450cb9ec349 | branch: feature/my_feature | o changeset: 1:7b9836f25f28 | branch: feature/my_feature | o changeset: 0:c22be856358b
note: les changesets sont différents mais les révisions sont les mêmes
Pour ceux qui sont enclins à utiliser l’interface graphique
Tortoise Hg
-> File
-> Settings
puis cocher rebase
.
Redémarrer l’interface tortue
Créez une nouvelle twig où vous déplacerez des changements. Cliquez sur le nom de la twig actuelle -> choisissez Open a new named branch
-> choisissez le nom de la twig.
public
(par exemple, draft
), passez à 5. (Si des modifications ont déjà été publiées et que vous n’êtes pas un développeur expérimenté, vous devriez parler à quelqu’un de haut niveau. grand temps, je ne prends aucune responsabilité :)). Allez dans View
-> Show Console
(ou Ctrl + L ) puis écrivez dans la console hg phase -f -d 2
– où 2 correspond à la révision la plus basse, vous vous déplacerez vers la nouvelle twig.
Aller à la twig et à la révision (devrait être la révision la plus haute si vous déplacez les modifications vers la nouvelle twig créée à l’étape 3.) Right Mouse
-> Update
Aller à la twig et revsion vous allez déplacer les changements de la Right Mouse
-> Modify History
-> Rebase
Cliquez sur Rebase
et priez pour qu’il n’y ait pas de conflit, fusionnez si nécessaire.
Push push, à ce stade, toutes les révisions doivent toujours être draft
.
Aller à la révision la plus haute dans la twig que vous déplaciez les changements à la Right Mouse
-> Change Phase to
-> Public
.
J’espère que cela vous fera gagner du temps.