web-dev-qa-db-fra.com

Annuler une bande HG accidentelle?

J'ai accidentellement exécuté hg strip et supprimé une pile de validations. Je n'ai rien fait dans le repo depuis. Existe-t-il un moyen pour moi de ramener cette pile de commits, d'annuler la bande hg que je viens d'exécuter?

17
ChristianCuevas

Tant que vous n'avez pas exécuté la bande avec le --no-backup option, les changesets supprimés peuvent être trouvés dans le référentiel sous .hg\strip-backup. Si vous triez le contenu du répertoire par date, le dernier est probablement celui que vous devez restaurer. Restaurez-le avec hg unbundle <filename>.

25
Mark Tolonen

Voici un exemple travaillé de unbundleà partir d'un post externe . Je l'ai nettoyé légèrement pour le rendre un peu plus général:

Récupération des fichiers supprimés lors de l'utilisation de Mercurial

Si vous supprimez accidentellement un correctif et n'avez pas de sauvegarde pour celui-ci, vous pouvez toujours récupérer vos fichiers à l'aide de Mercurial. Pour récupérer vos fichiers:

Ouvrez une fenêtre d'invite de commandes Microsoft Windows.

Accédez au dossier du projet dans lequel vous avez supprimé les fichiers.

Exécutez la commande dir

Accédez au .hg dossier dans lequel Mercurial stocke tous les fichiers de projet pertinents.

Exécutez à nouveau la commande dir.

Accédez au dossier de sauvegarde sur bande où Mercurial stocke les ensembles de sauvegarde des correctifs supprimés.

Exécutez à nouveau la commande dir. Plusieurs fichiers s'affichent dans le répertoire qui utilisent le <hash>-hg format. Ce sont les paquets de sauvegarde des correctifs supprimés.

enter image description here

Utilisez l'Explorateur Windows pour trouver le fichier requis. Ouvrez le strip-backup dossier dans l'Explorateur Windows et triez par Date de modification décroissante. À moins que le bundle de sauvegarde nécessaire ne soit déjà connu, [il est recommandé de] restaurer les bundles dans l'ordre chronologique inverse à partir du bundle le plus récent.

enter image description here

Revenez au dossier du projet.

Pour restaurer un ensemble, exécutez hg unbundle .hg\strip-backup\<bundle_file_name>. ... Vous pouvez l'ajouter à la variable d'environnement PATH pour la rendre accessible globalement.

enter image description here

Synchronisez le projet [à l'aide de hg pull] pour voir le patch restauré. Si le correctif restauré n'est pas celui requis, continuez à restaurer les correctifs dans l'ordre chronologique inverse jusqu'à ce que le correctif requis soit récupéré.

Remarque: Vous pouvez restaurer les bundles de sauvegarde dans n'importe quel ordre, au lieu d'utiliser l'ordre chronologique inverse. Cependant, cela peut ne pas être sûr. Vous pouvez finir par tenter de restaurer un ensemble de sauvegarde, qui dépend d'un autre ensemble de sauvegarde qui n'a pas été restauré. Dans ce cas, vous obtiendrez une erreur.

enter image description here

1
UuDdLrLrSs

Il est possible de hg pull à partir d'un fichier de sauvegarde sur bande comme alternative à l'utilisation de hg unbundle.

Comme indiqué dans un commentaire sur une autre réponse à cette question, hg unbundle a moins d'options et ne fonctionne qu'avec des bundles, mais peut dégrouper plusieurs bundles à la fois. Tandis que hg pull peut tirer d'une seule source (share/web/bundle) et dispose d'autres options .

Voici un exemple d'utilisation de hg pull basé sur n post externe par Isaac Jurado:

Habituellement, la sauvegarde est placée dans REPO/.hg/strip-backup/. Voir l'exemple ci-dessous:

 $ hg glog
 @  changeset:   2:d9f98bd00d5b tip
 |               three
 o  changeset:   1:e1634a4bde50
 |               two
 o  changeset:   0:eb14457d75fa
                 one
 $ hg strip 1
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved

 saved backup bundle to
 /Users/hchapman/ttt/.hg/strip-backup/e1634a4bde50-backup.hg

Et puis, ce que l'on ferait pour récupérer ces changesets serait:

$ hg pull $(hg root)/.hg/strip-backup/e1634a4bde50-backup.hg
1
UuDdLrLrSs