Comment puis-je réinitialiser –hard HEAD sur Mercurial?

Je suis un utilisateur de Git essayant d’utiliser Mercurial.

Voici ce qui s’est passé: j’ai fait un hg backout sur un hg backout que je voulais rétablir. Cela a créé une nouvelle tête, alors hg m’a demandé de fusionner (retour à “default”, je suppose). Après la fusion, il m’a dit que je devais encore commettre. Puis j’ai remarqué quelque chose que j’ai mal fait en résolvant un conflit dans la fusion, et j’ai décidé que je voulais tout avoir comme avant la hg backout , c’est-à-dire que cette fusion non validée devait disparaître. Sur Git, ces éléments non validés seraient dans l’index et je ferais juste un git reset --hard HEAD pour l’effacer mais, d’après ce que j’ai lu, l’index n’existe pas sur Mercurial. Alors, comment puis-je sortir de ça?

Si vous ne vous êtes pas encore engagé et que vous avez l’impression que vous ne l’avez pas fait, vous pouvez annuler tout le travail de fusion avec hg update --clean .

Cependant, dans la nouvelle version de mercurial, il existe une commande pratique pour fusionner un seul fichier: hg resolve path/to/file.ext . De l’ hg help resolve :

 The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and 

redémarrer la fusion à partir de zéro: “hg resolve file …” (ou “-a” pour tous les fichiers non résolus)

Ceci est proche:

hg update --clean

De git, les commandes:

 git reset --hard # reset to last commit git clean -df # delete untracked files 

sont égaux à

 hg update --clean # reset to last commit hg purge # delete untracked files 

La page GitConcepts du manuel Hg explique comment effectuer de nombreuses actions que les utilisateurs git connaissent bien dans Mercurial.

Mercurial ne possède pas de comportement git reset --hard . Cependant, l’extension de ssortingp fournit une commande de ssortingp qui fait. Pour utiliser, commencez par activer ssortingp dans votre fichier ~/.hgrc ::

 [extensions] ssortingp = 

Remarque: cette extension est nouvelle dans Mercurial-2.8. Les versions antérieures fournissaient la commande ssortingp dans l’ extension mq .

Vous pouvez maintenant exécuter des commandes telles que hg ssortingp ou même hg help ssortingp . Pour supprimer un ensemble de modifications et tous ses enfants, spécifiez simplement cet ensemble de modifications sous forme d’argument de hg ssortingp . Par exemple, pour supprimer la dernière validation que vous venez d’effectuer (après avoir utilisé des commandes ayant provoqué la hg rollback pour signaler qu’il n’y a plus de transaction à annuler), vous pouvez supprimer la révision d’ tip . Chaque fois que vous exécutez cette commande, une autre révision sera supprimée. les actions de hg ssortingp doivent être considérées comme irréversibles; Les utilisateurs peu familiers doivent faire des sauvegardes de leurs référentiels avant de les utiliser.

 $ hg ssortingp tip 

Par exemple, avec la syntaxe de revsets , j’indique que je veux supprimer tous les commits de ma part qui entraînent l’affichage de têtes supplémentaires lorsque hg heads . Si vous spécifiez une révision particulière dans l’expression ci-dessous autre que tip , tout ce qui n’est pas un ancêtre de la révision choisie dans la twig en cours sera réduit. Cela semble le plus proche du comportement que je veux quand je git reset --hard HEAD la commande git reset --hard HEAD .

 $ hg ssortingp "branch(tip) and not(ancestors(tip)::tip)"