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.
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.
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
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 .
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.
, 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.
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.
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
.
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