L'Mercurial Files d'attente tutoriel est terrible pour ce cas d'utilisation. Tous les exemples que j'ai vu supposons que vous avez encore à faire un commit et que vous êtes de l'actualisation d'un seul patch. La plupart du temps ce n'est pas le cas, et que vous avez 2 ou 3 s'engage à ce que vous voulez de courge ou de modifier de quelque autre façon.
Disons que vous avez ce genre de l'histoire:
---O---O---A---B---C
Le premier exemple est à la courge s'engage A, B, et C. les Premières init mq:
$ hg qinit
Maintenant nous avons besoin de "l'importation" s'engage A, B et C dans le patch de la file d'attente. Permet de supposer qu'ils sont les 3 derniers commits. On peut utiliser l'option "-N" révision de la syntaxe de les importer comme suit:
$ hg qimport -r -3:-1
Cela signifie que l'importation des correctifs à partir de 3 patchs en arrière jusqu'à la dernière validation. Vous pouvez vérifier le statut de ces patchs avec hg qseries
. Il devrait afficher quelque chose comme ceci:
$ hg qseries
101.diff
102.diff
103.diff
Si le nombre de 101, 102 et 103 correspondent à la local que les numéros de révision de la s'engage A, B et C. aujourd'hui, ces patchs sont appliqués, ce qui signifie que les changements qu'ils décrivent sont déjà dans la copie de travail. Vous pouvez vous débarrasser des modifications de la copie de travail et de les supprimer de l'historique des commits, de les enregistrer sous forme de patch uniquement, en utilisant hg qpop
. Vous pouvez dire hg qpop; hg qpop
de la pop changements C et B en dehors de la pile, ou spécifier un patch pour "pop". Dans ce cas, il serait quelque chose comme ceci:
$ hg qpop 101.diff
now at: 101.diff
Vous avez maintenant les patchs pour les révisions B et C dans le patch file d'attente, mais ils ne sont pas appliqués (leurs changements ont été "perdu" - ils n'existent que dans le patch zone d'attente). Maintenant, vous pouvez plier ces patchs dans le dernier, c'est à dire créer un nouveau commit qui est l'équivalent de la somme des changements A+B+C.
$ hg qfold -e 102.diff 103.diff
Cela montrera à votre éditeur de sorte que vous pouvez changer le message de commit. Par défaut, le message sera la concaténation des messages de commit pour que les modifications A, B et C, séparés par des astérisques. La bonne chose ici est que l' hg qfold
seront onglet-complète les patchs si vous utilisez bash et ont hg-achèvement script d'origine. Cela laisse à l'histoire comme cela, où A+B+C est un commit unique qui est la combinaison de 3 patchs qui nous intéressent:
---O---O---A+B+C
Un autre cas d'utilisation est de savoir si nous avons le même genre d'histoire comme avant, mais nous voulons déposer patch B et fusionner Un+C. C'est assez similaire à ci-dessus en fait. Lorsque vous arrivez à la qfold étape, il vous suffit de plier dans le dernier commit plutôt que les 2 derniers s'engage à:
$ hg qfold -e 103.diff
Cela laisse le changement de B dans le patch file d'attente, mais il n'est pas appliqué à la copie de travail et sa validation est pas dans l'histoire. Vous pouvez voir cela en exécutant:
$ hg qunapplied
102.diff
L'histoire ressemble maintenant à ceci, où A+C est un commit unique qui combine les variations de A et C:
---O---O---A+C
Un dernier cas d'utilisation peut-être que vous avez besoin de n'appliquer que s'engager C. Vous ferais par de l'exécution de l'qimport comme ci-dessus, et vous enlevez tous les patchs que vous ne voulez pas que:
$ hg qpop -a
L'-un drapeau signifie pop off tous les correctifs. Maintenant, vous pouvez appliquer juste celui que vous voulez:
$ hg qpush 103.diff
Cela vous laisse avec cette histoire:
---O---O---C
Une fois que vous avez terminé avec tout cela, vous avez besoin pour finir de la file d'attente de violon. Cela peut être fait avec:
$ hg qfinish -a
Donc, nous y sommes. Vous pouvez maintenant exécuter hg push
et seulement s'engagent exactement ce que vous voulez, ou hg email
cohérente patch à la liste de diffusion.