Le déplacement de Mercurial devient une nouvelle twig

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

  1. Aller à Tortoise Hg -> File -> Settings puis cocher rebase .

entrer la description de l'image ici

  1. Redémarrer l’interface tortue

  2. 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.

entrer la description de l'image ici

  1. Si les modifications que vous souhaitez déplacer n’ont pas été rendues 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.

  1. 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

  2. Aller à la twig et revsion vous allez déplacer les changements de la Right Mouse -> Modify History -> Rebase

entrer la description de l'image ici

  1. Cliquez sur Rebase et priez pour qu’il n’y ait pas de conflit, fusionnez si nécessaire.

  2. Push push, à ce stade, toutes les révisions doivent toujours être draft .

  3. Aller à la révision la plus haute dans la twig que vous déplaciez les changements à la Right Mouse -> Change Phase to -> Public .

entrer la description de l'image ici

J’espère que cela vous fera gagner du temps.