2009-05-18 8 views
15

Comment puis-je rétablir un seul morceau dans Mercurial, de la même manière que dans darcs, c'est-à-dire qu'il me demande si chaque morceau et quel fichier je souhaite le rétablir? Est-il possible d'utiliser TortoiseHg?Mercurial: Rétablir un seul morceau

Merci

+0

Peut-être que vous devriez spécifier ce qu'est un morceau. Je n'ai pas beaucoup d'expérience avec Hg mais je n'ai pas vu ce nom dans le doc quand je l'ai lu, et la recherche 'hunk' dans le Wiki donne 0 résultats ... – PhiLho

+2

Par "hunk" je veux dire un "extrait de change ", c'est-à-dire une partie du" diff ". TortoiseHg utilise cette terminologie, tout comme darcs. –

+0

Vous pouvez configurer un outil de comparaison externe (par exemple: TortoiseGitMerge) dans les options TortoiseHg, et le lancer en sélectionnant "Diff à Parent" dans le menu contextuel qui apparaît sur votre fichier dans TortoiseHg. À partir de l'outil de comparaison, il est facile de détecter et de retourner les mors séparément. – wil

Répondre

4

Le record extension est inspiré par darcs record. Il vous permettra de ajouter seulement des coups spécifiques au prochain commit, c'est-à-dire le contraire de ce que vous voulez. Mais vous pouvez ajouter tous les monstres à l'exception de celui que vous voulez inverser, puis faites un hg revert pour le rétablir. Un peu en arrière, je sais ... :-)

Vous pouvez également faire hg diff > patch; hg revert, éditer patch pour supprimer le morceau et faire hg import --no-commit pour réactiver le correctif. Cela est probablement plus rapide, mais vous devez modifier manuellement le correctif. J'ai eu beaucoup de succès avec le Emacs diff-mode, mais puisque vous posez des questions sur TortoiseHg, vous ne voudrez peut-être pas utiliser Emacs.

+0

J'utilise Emacs tout le temps, je ne suis pas complètement familier avec le support Hg. Je vais regarder dedans et j'espère que c'est comme n'importe quel autre mode VC ... Merci pour la suggestion! –

+0

Génial. J'ai seulement utilisé Mercurial depuis Emacs: 'C-x v =' fait 'hg diff' sur le fichier courant, et' C-x v v' fait 'hg commit' sur le fichier courant. C'est parfois sympa quand je travaille sur un dépôt où je sais que l'enregistrement d'un seul fichier est correct. En ce qui concerne l'édition du patch, cela est indépendant de Mercurial. Il utilise simplement le mode diff d'Emacs qui sait comment mettre à jour les numéros de ligne lorsque vous supprimez des éléments d'un patch. –

4

Pour renverser un changeset sur un seul essai de fichier:

hg diff -c | correctif -R

Cela inversera le changeset introduit par cette révision sur ce nom de fichier. Maintenant, si le même comportement darcs/git style picking cerise pourrait être inclus dans ce sens, je serais très heureux.

+1

Vous avez probablement besoin de faire ce 'patch -R -p1' ou des niveaux plus élevés de' -p', en fonction de votre répertoire de travail actuel dans le référentiel. –

7

En fait, mercurial se réfère à des "morceaux", au moins dans l'outil Shelve. Ce qui m'amène à la manière favorite de les inverser (et les fonctionnalités préférées de TortoiseHg).

Il suffit de déplacer les morceaux que vous souhaitez restaurer sur une étagère que vous créez uniquement avec l'intention de supprimer. Cela fonctionne très bien tant que les morceaux sont identifiés comme vous le souhaitez. Sinon, vous n'avez pas d'autre choix que de faire quelque chose manuellement. Si vous utilisez TortoiseHg Workbench ou VisualHg, il est très facile d'accéder à l'outil Shelve: il y a un bouton à côté des boutons de bascule du mode diff. Si vous n'êtes pas familier avec les étagères, faites-vous une faveur et commencez à l'utiliser. Il m'a sauvé beaucoup d'aggravation quand j'ai oublié de m'engager plus tôt, ou j'ai décidé d'omettre le code expérimental d'un commit.

+1

Maintenant, il y a un bouton nommé "Supprimer les morceaux sélectionnés" présents! Je le découvrirais à peine moi-même, merci :) – vines

Questions connexes