Je suis un utilisateur Git essayant d'utiliser Mercurial.
Voici ce qui s'est passé: j'ai fait un hg backout
sur un ensemble de modifications que je voulais rétablir. Cela a créé une nouvelle tête, donc hg m'a demandé de fusionner (retour à "par défaut", je suppose). Après la fusion, il m'a dit que je devais encore m'engager. Ensuite, j'ai remarqué quelque chose que j'avais mal fait lors de la résolution d'un conflit lors de la fusion, et j'ai décidé que je voulais tout avoir comme avant hg backout
, c'est-à-dire que je veux que cette fusion non engagée disparaisse. Sur Git, ce truc non engagé serait 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 me retirer de cela?
Si vous ne vous êtes pas encore engagé, et il semble que vous ne l'ayez pas fait, vous pouvez annuler tout le travail de fusion avec hg update --clean
.
Cependant, dans les nouveaux Mercurial, il existe une commande pratique pour fusionner à nouveau un seul fichier: hg resolve path/to/file.ext
. Du hg help resolve
:
The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and
redémarrez la fusion à partir de zéro: "hg résoudre le fichier ..." (ou "-a" pour tous les fichiers non résolus)
C'est proche:
hg update --clean
La page GitConcepts du manuel Hg explique comment effectuer de nombreuses actions que les utilisateurs git
connaissent dans Mercurial.
Mercurial n'a pas de comportement git reset --hard
Intégré. Cependant, l'extension strip
fournit une commande strip
qui le fait. Pour utiliser, activez d'abord strip
dans votre fichier ~/.hgrc
::
[extensions]
strip =
Remarque: cette extension est livrée dans la nouvelle version de Mercurial 2.8. Les versions précédentes fournissaient la commande strip
dans l'extension mq
.
Vous pouvez maintenant exécuter des commandes comme hg strip
Ou même hg help strip
. Pour supprimer un changeset et tous ses enfants, spécifiez simplement ce changeset comme argument à hg strip
. Par exemple, pour supprimer le dernier commit que vous venez de faire (après avoir utilisé des commandes qui ont fait que hg rollback
Signale qu'il n'y a plus de transaction à annuler), vous pouvez supprimer la révision tip
. Chaque fois que vous exécutez cette commande, une autre révision sera supprimée. Les actions de hg strip
Doivent être considérées comme irréversibles; les utilisateurs peu familiers devraient faire des sauvegardes de leurs référentiels avant d'utiliser.
$ hg strip tip
Par exemple, avec syntaxe des revsets , j'indique que je veux supprimer tous les commits qui entraînent l'affichage de têtes supplémentaires lorsque j'exécute hg heads
. Si vous spécifiez une révision particulière dans l'expression ci-dessous autre que tip
, tout dans la branche actuelle qui n'est pas un ancêtre de votre révision choisie sera coupé. Cela semble plus proche du comportement que je souhaite lorsque j'émets la commande git reset --hard HEAD
.
$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
Depuis 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