Accidentalmente, al usar una GUI en lugar de CLI, eliminé todos los archivos de un proyecto Mercurial.
Me recuperé con Revertir bien y perdí algo de trabajo, que como tengo una máquina del tiempo podría recuperar fácilmente. Pero, ¿hay alguna forma de eliminar o recuperar esos archivos? Buscó en el manual y buscó en Google, pero no puede ver nada. ¿Algún plugin?
Probablemente estoy respondiendo a mi propia pregunta aquí, pero los archivos desaparecieron del directorio y no estaban en la papelera para recuperarlos, por lo que supongo que Eliminar es irrevocable.
ps Lo sé hg forget
o hg remove -Af
lo eliminaré sin eliminar del directorio, pero mi pregunta tiene que ver con el error que cometí en lugar de pensar en la acción.
Respuestas:
Primero, use
hg grep
para encontrar el archivo eliminado que desea recuperar. La salida de este comando le mostrará la última revisión para la que estaba presente el archivo y la ruta al archivo eliminado. En segundo lugar, ejecute.hg revert -r <revision number> <path to deleted file>
El archivo eliminado ahora estará en su copia de trabajo, listo para ser enviado de nuevo a la cabeza.fuente
hg log -I '**file.ext'
Cita del comentario:
Si este es el caso, solo necesita actualizar el directorio de trabajo a la revisión anterior:
Tenga en cuenta el número de revisión negativo. Si los archivos que eliminó no están en la revisión anterior, puede encontrarlos usando:
fuente
Bueno, esto funcionó para mí.
fuente
Para Mercurial 1.6 y superior
Si conoce el nombre del archivo eliminado, puede encontrar su revisión fácilmente con:
Esto le dará la revisión en la que se borrará un archivo llamado NAME.c (en la raíz).
Luego, puede revertir el archivo a la revisión anterior con (como otras respuestas):
En su lugar, puede usar un patrón de nombre de archivo para adaptarse a lo que sabe, por ejemplo, puede usarlo
**/NAME.c
para buscar en todos los directorios. Puede leerlo en Patrones de nombre de archivo . Y use este enlace para conocer las nuevas especificaciones de revset .fuente
Una adición a la respuesta aceptada: esto es más rápido si desea deshacer todas las eliminaciones en una confirmación. Eliminé una carpeta grande con unos cientos de archivos y lo hice
hg addremove
, lo que no era mi intención, así que tuve que deshacer todas esas eliminaciones.¿Usar Buscar archivos eliminados en el historial del repositorio de Mercurial, rápidamente? + xargs + tr, revertir todas las eliminaciones de la revisión -3 a la versión de la revisión -4:
Tenga en cuenta que esto fallará si alguno de sus archivos tiene espacios en el nombre; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html no parece tener ninguna plantilla donde
{file_dels}
está dividida\n
en este momento.fuente
Puede deshacer la última confirmación en un repositorio con
hg rollback
. Solo hay un nivel de reversión disponible, por lo que si realizó la eliminación con más de una confirmación, esto no deshará completamente su cambio. Esto solo funciona en su repositorio local, por lo que si ha presionado, no podrá deshacerlo en el repositorio remoto.fuente
hg rollback
no recuperará el archivo eliminado porque la eliminación del archivo no es parte de la transacción de confirmación.Puede eliminar las revisiones comprometidas utilizando el
hg strip
comando, que es proporcionado por la extensión mq (Mercurial Queues). Esto debería devolverle sus archivos.Haga una copia de seguridad antes de intentarlo, porque alterará la base de datos de conjuntos de cambios de Mercurial.
fuente
El siguiente método es sencillo y tan estúpido que no puede salir mal. Si ha eliminado o renombrado varios archivos, estará bien.
y ahora inicia mc (o Far Manager) y compara lo que era con lo que se ha convertido.
cuando esté listo, simplemente elimínelo
mydirectory1
.fuente
Lo siguiente funcionó para mí.
(Opcional, para revertir todos los archivos)
fuente