Question

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

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

Mise à jour

Dans mon cas concret, je commis un changeset (pas poussé). Ensuite, j'ai tiré et mis à jour à partir du 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 est pas exactement ce que je recherche, car il rollback la traction au lieu de mon engagement.

Était-ce utile?

La solution

Une façon serait hg rollback (OBSOLETE Hg2.7, Août 2013)

  

hg commit --amend au lieu de corriger les erreurs à rollback dans le dernier engager.

     

Annulez la dernière transaction dans un dépôt.

     

commettre ou fusion , Mercurial ajoute le changeset dernière entrée.
  Mercurial conserve un journal des transactions du nom de chaque fichier touché et sa longueur avant la transaction. Sur abort, il tronque chaque fichier à sa longueur avant. Cette simplicité est un avantage de faire revlogs append-only. Le journal des transactions permet également une opération d'annulation.

Voir TortoiseHg section de récupération :

text alt

Ce fil détaille également la différence entre hg rollback et hg strip :
(Écrit par Martin Geisler qui contribue également au SO)

  
      
  • 'hg rollback' enlèvera la dernière transaction. Les transactions sont un concept souvent dans les bases de données. En Mercurial nous commençons une transaction lorsque certaines opérations sont exécutées, par exemple engager, push, pull ...
      Lorsque l'opération se termine avec succès, la transaction est marquée comme étant terminée. Si une erreur se produit, la transaction est « annulée » et le dépôt est laissé dans le même état qu'avant.
      Vous pouvez déclencher manuellement un retour en arrière avec « hg rollback ». Cela annule la dernière commande transactionnelle. Si une commande de traction a 10 nouveaux changesets dans le référentiel sur les branches différentes, puis « hg rollback » va les supprimer tous.   S'il vous plaît noter: il est pas de sauvegarde lorsque vous annuler une transaction

  •   
  • 'hg strip' enlèvera un changeset et tous ses descendants. le   changesets sont enregistrés en tant que paquet, que vous pouvez appliquer à nouveau si vous   besoin d'eux de retour.

  •   

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

  

Vous pouvez 'un-commit' des fichiers par hg d'abord les oublier, par exemple .: hg forget filea; hg commit --amend, mais qui semble unintuitive.
   hg strip --keep est probablement une meilleure solution pour hg moderne.

Autres conseils

hg strip supprime complètement une révision (et tous les descendants) à partir du référentiel.

Pour bande utilisation, vous devrez installer en ajoutant les lignes suivantes MqExtension à votre .hgrc (ou Mercurial.ini):

[extensions]
mq =

TortoiseHg la commande de bande est disponible dans la table de travail. Faites un clic droit sur une révision et choisissez «Modifier histoire -.> « Strip »

Depuis strip change l'histoire de dépôt, vous ne devez l'utiliser sur les révisions qui ne sont pas encore partagées avec qui que ce soit. Si vous utilisez Mercurial 2.1+ vous pouvez phases pour suivre ces informations. Si un commettras est encore dans le projet de phase, il n'a pas été partagé avec d'autres référentiels afin que vous puissiez dépouiller en toute sécurité. (Merci à Zasurus pour avoir signalé).

Puisque vous ne pouvez pas vous rollback devez fusionner ce commit dans la nouvelle tête que vous avez quand vous avez tiré. Si vous ne souhaitez pas que le travail que vous avez fait dans ce que vous pouvez facilement le faire en utilisant cette astuce .

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 de la révision actuellement vérifié, et aucun des changements de la révision sans check-out (celui que vous avez écrit que vous ne voulez plus).

Ceci est une excellente façon de le faire, car il maintient votre histoire exacte et complète. Si 2 ans à partir de maintenant quelqu'un trouve un bug dans ce que vous baissai vous pouvez regarder dans votre (inutilisé mais sauvé) la mise en œuvre de la même chose et aller, « oh, je l'ai fait droit ». :)

hg rollback est-ce que vous voulez.

Dans TortoiseHg, le hg rollback se fait dans la boîte de dialogue de validation. Ouvrez la boîte de dialogue Livrer et sélectionnez « Annuler ».

text alt

Dans la version actuelle de TortoiseHg Workbench 4.4.1 (07,2018), vous pouvez utiliser Repository - Rollback/undo...:
entrer la description d'image ici

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

Sa solution de contournement.

Si vous ne poussez pas vers le serveur, vous cloner dans le nouveau dossier d'autre délavage (supprimer tous les fichiers) à partir de votre dossier et dépôt clone nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top