105 votes

Comment puis-je récupérer un fichier supprimé dans Mercurial (si tant est que cela soit possible) ?

Par accident, en utilisant une interface graphique plutôt qu'une CLI, j'ai supprimé tous les fichiers d'un projet Mercurial.

J'ai récupéré avec Revert ok et perdu un peu de travail, que j'ai pu facilement récupérer grâce à ma machine à remonter le temps. Mais existe-t-il un moyen de supprimer/supprimer de tels fichiers ? J'ai parcouru le manuel et fait des recherches sur Google, mais je ne vois rien. Des plugins ?

Je réponds probablement à ma propre question ici, mais les fichiers ont disparu du répertoire et n'étaient pas dans la corbeille pour être récupérés, donc je suppose que la suppression est irrévocable ?

p.s. Je sais que hg forget o hg remove -Af supprimera le fichier sans le supprimer du répertoire, mais ma question porte sur l'erreur que j'ai commise plutôt que sur le fait d'avoir bien réfléchi à l'action.

156voto

BungleFeet Points 1151

D'abord, utilisez hg grep pour trouver le fichier supprimé que vous souhaitez récupérer. La sortie de cette commande vous indiquera la dernière révision pour laquelle le fichier était présent, ainsi que le chemin d'accès au fichier supprimé. Ensuite, exécutez hg revert -r <revision number> <path to deleted file> Le fichier supprimé sera maintenant dans votre copie de travail, prêt à être remis dans la tête.

8voto

mrucci Points 1917

Citation du commentaire :

J'ai mis en place un dépôt, j'ai tout validé, j'ai supprimé puis validé à nouveau.

Si c'est le cas, il suffit de mettre à jour le répertoire de travail à la révision précédente :

$ hg update -C -r-2

Notez le numéro de révision négatif. Si les fichiers que vous avez supprimés ne se trouvent pas dans la révision précédente, vous pouvez les retrouver en utilisant :

$ hg log -v

5voto

PhoneixS Points 875

Pour Mercurial 1.6 et plus

Si vous connaissez le nom du fichier à supprimer, vous pouvez trouver sa révision facilement avec :

hg log -r "removes('NAME.c')"

Cela vous donnera la révision dans laquelle un fichier appelé NOM.c (dans la racine) est supprimé.

Ensuite, vous pouvez rétablir le fichier à la révision précédente avec (comme les autres réponses) :

hg revert -r <revision number> <path to deleted file>

Vous pouvez utiliser un modèle de nom de fichier à la place pour vous adapter à ce que vous connaissez, par exemple vous pouvez utiliser **/NAME.c pour rechercher dans tous les répertoires. Vous pouvez lire à ce sujet dans Nom du fichier Patters . Et utilisez ce lien pour connaître le nouveau spécifications du revset .

5voto

stillLearning Points 114

Ça a marché pour moi.

hg revert -r revision pathToTheFile

0voto

ataylor Points 31154

Vous pouvez annuler le dernier commit sur un repo avec hg rollback . Il n'y a qu'un seul niveau de retour en arrière disponible, donc si vous avez effectué la suppression avec plus d'un commit, cela n'annulera pas complètement votre changement. Cela ne fonctionne que sur votre dépôt local, donc si vous avez poussé, vous ne serez pas en mesure de l'annuler dans le dépôt distant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X