Mercurial annuler le dernier commit

Comment puis-je annuler mon dernier changement de Mercurial commis accidentellement (non poussé)?

si possible, une façon de le faire avec TortoiseHg serait préférable.

mise à Jour

dans mon cas concret, j'ai commis un changement (pas poussé). Puis j'ai sorti et mis à jour depuis le serveur. Avec ces nouvelles mises à jour, j'ai décidé que mon dernier commit est obsolète et je ne veux pas synchroniser. Il semble donc ,que hg rollback ce n'est pas exactement ce que je cherche, parce que ça ferait reculer le pull au lieu de mon commit.

118
demandé sur Gangnus 2011-01-21 18:42:46

7 réponses

On pourrait hg rollback (obsolète depuis la Hg2.7, août 2013),

veuillez utiliser hg commit --amend au lieu de rollback pour corriger les erreurs dans la dernière commit.

annulation de la dernière opération dans un référentiel.

Quand s'engager ou fusion , Mercurial ajoute le changeset entrée en dernier.

Mercurial tient un journal des transactions du nom de chaque fichier touché et de sa longueur Avant la transaction. À l'abandon, il tronque chaque fichier à sa longueur antérieure. Cette simplicité est un avantage de faire revlogs annexe seulement. Le journal des transactions permet également une opération annulée.

voir TortoiseHg de Récupération de la section :

alt text

ce fil détaille également la différence entre hg rollback et hg strip :

(écrit par Martin Geisler qui contribue également à)

  • ' hg rollback ' va supprimer la dernière transaction. Les Transactions sont un concept que l'on retrouve souvent dans les bases de données. Dans Mercurial, nous commençons une transaction lorsque certaines opérations sont exécutées, comme s'engager, pousser, tirer...

    Lorsque l'opération se termine avec succès, la transaction est marquée comme étant complète. Si une erreur se produit, la transaction est "annulée" et le référentiel est laissé dans le même état qu'avant.

    Vous pouvez déclencher manuellement une restauration avec hg annuler". Cela annulera la dernière transaction commande. Si une commande pull a introduit 10 nouveaux changesets dans le dépôt sur différentes branches, alors ' hg rollback ' les supprimera tous. S'il vous plaît noter: Il ya pas de sauvegarde lorsque vous faire reculer une transaction!

  • ' hg strip ' supprimera un changeset et tous ses descendants. Le les modifications sont sauvegardées sous forme de paquet, que vous pouvez appliquer à nouveau si vous besoin de retour.

ForeverWintr suggère dans les commentaires (en 2016, 5 ans plus tard)

vous pouvez" non-commit "les fichiers en les oubliant d'abord, par exemple: hg forget filea; hg commit --amend , mais cela semble peu intuitif.

hg strip --keep est probablement une meilleure solution pour le mercure moderne.

71
répondu VonC 2018-02-22 10:04:30

hg strip supprimera complètement une révision (et tous les descendants) du dépôt.

pour utiliser strip vous aurez besoin d'installer mq extension en ajoutant les lignes suivantes à votre .hgrc (ou mercurial.ini):

[extensions]
mq =

dans TortoiseHg la commande de bande est disponible dans l'établi. Cliquez avec le bouton droit de la souris sur une révision et choisissez "Modifier l'historique" - > "Supprimer".

Puisque strip modifie l'historique du dépôt, vous ne devez l'utiliser que pour les révisions qui n'ont pas encore été partagées avec quiconque. Si vous utilisez mercurial 2.1+ vous pouvez utiliser phases pour suivre cette information. Si un commit est encore dans la phase de projet, il n'a pas été partagé avec d'autres dépôts de sorte que vous pouvez le démonter en toute sécurité. (Merci à Zasurus de le souligner).

44
répondu Peter Graham 2018-01-25 12:51:47

comme vous ne pouvez pas reculer, vous devriez fusionner ce commit dans la nouvelle tête que vous avez quand vous avez tiré. Si vous ne voulez pas tout le travail que vous avez fait dans elle, vous pouvez facilement le faire en utilisant ce conseil .

donc si vous avez tiré et mis à jour à leur tête vous pouvez faire ceci:

hg --config ui.merge=internal:local merge

conserve toutes les modifications dans l'extrait de révision, et aucune des modifications dans le pas-extrait révision (celui que vous avez écrit que vous ne souhaitez plus).

C'est une excellente façon de le faire parce qu'il maintient votre histoire exacte et complète. Si dans 2 ans quelqu'un trouve un bug dans ce que vous avez retiré, vous pouvez regarder dans votre implémentation (inutilisée mais sauvegardée) de la même chose et dire: "oh, j'ai bien fait". :)

19
répondu Ry4an Brase 2016-08-04 19:08:10

hg rollback c'est ce que tu veux.

Dans TortoiseHg, le hg rollback est accompli dans la boîte de dialogue de livraison. Ouvrez le dialogue de propagation et sélectionnez "Annuler".

alt text

5
répondu Tim Henigan 2011-01-21 16:00:57

dans la version actuelle de TortoiseHg Workbench 4.4.1 (07.2018) vous pouvez utiliser Repository - Rollback/undo... :

enter image description here

1
répondu TmTron 2018-07-25 12:56:00

après que vous avez tiré et mis à jour votre espace de travail faire un thg et clic droit sur le jeu de changement que vous voulez vous débarrasser de et puis cliquez sur Modifier l'histoire -> strip, il va supprimer le jeu de changement et vous pointer à la pointe par défaut.

0
répondu cabhishek 2011-08-08 16:06:28

son contournement.

si vous ne poussez pas vers le serveur, vous clonerez dans le nouveau dossier sinon washout(supprimer tous les fichiers) à partir de votre dossier de dépôt et clonez nouveau.

0
répondu ITsDEv 2017-07-11 07:38:58