Comment puis-je récupérer un fichier supprimé dans Mercurial (si c'est le cas)?

accidentellement, en utilisant une GUI par opposition à CLI, j'ai enlevé chaque fichier dans un projet Mercurial.

j'ai récupéré avec Revert ok et j'ai perdu du travail, que comme j'ai machine à remonter le temps je pourrais facilement revenir. Mais y a-t-il un moyen de supprimer/annuler de tels fichiers? J'ai cherché dans le manuel et j'ai cherché sur Google, mais je ne vois rien. Tous les plugins?

je suis probablement répondre à ma propre question ici, mais les fichiers ont disparu de l'annuaire et n'étaient pas dans la poubelle à récupérer donc je suppose que supprimer est irrévocable?

p. S. Je sais que hg forget ou hg remove -Af va supprimer sans supprimer du répertoire, mais ma question a à voir avec l'erreur que j'ai faite par opposition à cool penser l'action à travers.

94
demandé sur Rod 2010-02-01 11:28:12

9 réponses

tout 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, et le chemin vers le fichier supprimé. Deuxièmement, exécuter hg revert -r <revision number> <path to deleted file> Le fichier supprimé sera maintenant dans votre copie de travail, prêt à être réutilisé dans head.

144
répondu BungleFeet 2010-07-04 10:54:15

citation du commentaire:

j'ai mis en place un dépôt, j'ai tout engagé, J'ai retiré et puis j'ai à nouveau engagé

si tel est le cas, vous n'avez qu'à mettre à jour le répertoire de travail à la révision précédente:

$ hg update -C -r-2

noter le numéro de révision négatif. si les fichiers que vous avez supprimés ne sont pas dans la révision précédente, vous pouvez les trouver en utilisant:

$ hg log -v
7
répondu mrucci 2010-02-02 17:32:38

ça a marché pour moi.

hg revert -r revision pathToTheFile
5
répondu Shweta 2014-08-27 19:29:19

Pour Mercurial 1.6 et au-dessus de

si vous connaissez le nom du fichier de suppression Vous pouvez trouver sa révision facilement avec:

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

cela vous donnera la révision dans witch un fichier appelé NAME.c (à la racine) est supprimé.

ensuite, vous pouvez retourner 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 de adaptez à ce que vous savez, par exemple vous pouvez utiliser **/NAME.c pour rechercher dans tous les répertoires. Vous pouvez le lire dans nom de fichier Patters . Et utilisez ce lien pour en savoir plus sur le nouveau revset specifications .

4
répondu PhoneixS 2014-06-05 09:37:50

un ajout à la réponse acceptée - c'est plus rapide si vous voulez annuler toutes les suppressions dans une propagation. J'ai supprimé un dossier volumineux avec quelques centaines de fichiers en et ne hg addremove , ce qui n'était pas mon intention, j'ai donc dû annuler tous ces suppressions.

utilisant trouver des fichiers supprimés dans L'histoire du dépôt Mercurial, rapidement? + xargs + tr, revenir révision -3 renvois vers la version de révision -4:

hg log -r -3 --template "{rev}: {file_dels}\n" | tr ' ' '\n' | xargs hg revert -r -4 

notez que cela échouera si l'un de vos fichiers a des espaces dans le nom; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html ne semble pas avoir de gabarits où {file_dels} est divisé par \n en ce moment.

1
répondu keflavich 2017-05-23 11:55:07

, Vous pouvez annuler le dernier commit sur un repo avec hg rollback . Il n'y a qu'un seul niveau de rollback disponible, donc si vous avez fait le remove avec plus d'un commit, cela ne va pas complètement annuler votre changement. Cela ne fonctionne que sur votre dépôt local, Donc si vous avez poussé vous ne serez pas en mesure de le défaire dans la prise en charge à distance.

0
répondu ataylor 2010-02-01 21:21:25

vous pouvez supprimer les révisions engagées en utilisant la commande hg strip , qui est fournie par l'extension mq (Mercurial Files). Cela devrait vous redonner vos fichiers.

faire une sauvegarde avant d'essayer que, parce qu'il va modifier la base de données de Mercurial des changesets.

0
répondu daniel kullmann 2011-11-10 11:05:48

la méthode ci-dessous est simple et tellement stupide qu'elle ne peut pas se tromper. Si vous avez supprimé ou renommé plusieurs fichiers, tout ira bien.

hg clone mydirectory mydirectory1

et maintenant vous commencez mc (ou Gestionnaire Far) et comparez ce qu'il était par rapport à ce qu'il est devenu.

quand c'est fait, il suffit de supprimer mydirectory1 .

0
répondu 18446744073709551615 2012-01-24 09:17:23

ce qui suit a fonctionné pour moi.

hg revert -r <Revision Number> <File Name>

(facultatif, pour revenir à tous les fichiers)

hg revert -r <Revision Number> --all
0
répondu Naveen Kumar V 2018-02-20 12:38:31