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?
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>
.
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.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.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'environnementPATH
pour la rendre accessible globalement.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.
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