J'ai un certain nombre de changements que j'ai commis dans mon référentiel local, mais qui n'ont pas encore été poussés. Étant donné qu'une fonctionnalité prend plus de temps que prévu, je souhaite échanger ces modifications sur une branche nommée avant de pousser. Comment puis-je faire ceci?
124
Réponses:
Comme suggéré par Mark, la MqExtension est une solution pour votre problème. IMHO un flux de travail plus simple consiste à utiliser l' extension rebase . Supposons que vous ayez une histoire comme celle-ci:
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évisions1-2
sur une branche nommée, disonsmy-feature
. Mettre à jour vers la révision0
et créer cette branche:L'histoire ressemble maintenant à ceci:
Utilisez la
rebase
commande pour déplacer les révisions1-2
vers la révision3
:Cela donne le graphique suivant:
C'est tout ... comme mentionné dans les commentaires à la réponse de Mark, déplacer des ensembles de modifications déjà poussés est généralement une mauvaise idée, à moins que vous ne travailliez dans une petite équipe où vous êtes capable de communiquer et d'appliquer votre manipulation d'historique.
la source
fold
commande de l' extension histedit désormais intégrée ).hg log -G
( GraphlogExtension ). J'ai supprimé certaines lignes manuellement, mais il aurait également pu être rendu complètement automatiquement à l'aide de styles de journal personnalisés .Vous pouvez utiliser le MqExtension . Disons que les ensembles de modifications à déplacer sont des révisions 1 à 3:
la source
Je préfère la solution de patch décrite ici par Mark Tolonen
Ce que j'ai:
Ce que je veux:
commandes mercurials:
Voici l'état de mon référentiel local
Maintenant, je dois supprimer les révisions 1 2 et 3 de ma branche par défaut. Vous pouvez le faire avec la commande strip de l'extension mq.
hg strip
supprime l'ensemble de modifications 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 ajouter :Et maintenant supprimez ce référentiel à la révision 1.
et nous voici
Remarque: les changesets sont différents mais les révisions sont les mêmes
la source
Pour ceux qui sont enclins à utiliser l'interface graphique
Tortoise Hg
->File
->Settings
puis cochezrebase
.Redémarrez l'interface utilisateur de la tortue
Créez une nouvelle branche dans laquelle vous déplacerez les modifications. Cliquez sur le nom de la branche actuelle -> choisissez
Open a new named branch
-> choisissez le nom de la branche.public
(par exempledraft
), passez à 5. (Si des modifications ont déjà été publiées et que vous n'êtes pas un développeur senior, vous devriez en parler à quelqu'un de senior (obtenir un bouc émissaire) car vous risquez de tout gâcher. , Je ne prends aucune responsabilité :)).Allez sur
View
->Show Console
(ou Ctrl+ L) puis écrivez dans la consolehg phase -f -d 2
- où 2 est la version la plus basse que vous déplacerez vers la nouvelle branche.Aller à la branche et à la révision (devrait être la révision la plus élevée si vous déplacez les modifications vers la nouvelle branche créée à l'étape 3.)
Right Mouse
->Update
Allez dans la branche et la révision à partir de laquelle vous déplacerez les modifications
Right Mouse
->Modify History
->Rebase
Cliquez
Rebase
et priez pour qu'il n'y ait pas de conflits, fusionnez si vous le devez.Poussez les changements, à ce stade, toutes les révisions devraient toujours l'être
draft
.Accédez à la révision la plus élevée de la branche vers laquelle vous déplaçiez les modifications
Right Mouse
->Change Phase to
->Public
.J'espère que cela vous fera gagner du temps.
la source
public
plus automatiquement (du moins pour moi, ils ne le font pas).