Aunque Mercurial no ofrece una alternativa fácil y se aleja de la idea de la historia mutable, hay algunas maneras de lograr algo cercano. En esta publicación, esbozaré algunos de ellos.
hg rollback
Si desea específicamente para deshacer la última confirmación, puede utilizar:
hg rollback
que deshacer el envío de datos (que no toca el árbol de trabajo - que debe ser capaz para seguirlo con hg revert --all
o hg update -C
si también desea reiniciar todo el directorio de trabajo).
hg clone -r
Supongamos que desea restablecer su repositorio llamado giraffe
a 77182fb7451f revisión. Si cd
en el directorio padre y ejecute:
hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/
entonces usted va a terminar con nueva jirafa, un repositorio en 77182fb7451f revisión. (El cp
es necesario para garantizar que los nuevos-jirafa paths
(como "remotos" de GIT) correctamente apuntar a la cesión temporal de origen en lugar de a la carpeta giraffe
como lo haría de manera predeterminada.)
Esto es más rápido que reclonación de internet porque solo copia los archivos localmente en su disco (y en muchos sistemas, los vincula duramente para ahorrar aún más tiempo y espacio), pero aún puede consumir mucho tiempo si su repositorio es grande.
hg strip
Si usted quiere hacer las cosas más complicadas con la modificación de la historia comprometerse (que se frunció el ceño un poco en el mundo de Hg, por cierto), en primer lugar que el Mercurial Queues extension añadiendo las siguientes líneas a su .hgrc
(no hay necesidad de especificar una ruta después del signo igual):
[extensions]
mq =
Esto le da (entre otras cosas útiles) el comando hg strip
para eliminar completamente un conjunto de cambios y todos sus descendientes de un repositorio.De este modo se puede utilizar un comando como:
hg strip 1cc72d33ea76
si 1cc72d33ea76 es el primer "malo" de cambios en su repositorio que desea eliminar.
Por desgracia, a menudo es difícil de eliminar exactamente los conjuntos de cambios adecuados usando este método y que es muy fácil acabar con múltiples cabezas (que se pueden ver usando hg heads
), lo que requiere tediosa aplicación repetida de hg strip
antes de poder llegar a donde quieres estar sin cabezas extra.
tira hg utilizando revsets
Uso hg revsets puede eliminar todos los antepasados de .
(la versión actual), que son no antepasados de la revisión que desea revertir, usando un comando como:
hg strip "ancestors(.) and not ancestors(77182fb7451f)"
Asegúrese de que a primera ejecución:
hg log -r "ancestors(.) and not ancestors(77182fb7451f)"
que le mostrará al l los conjuntos de cambios que hg strip
eliminarían, para que pueda asegurarse de que no dañe irreparablemente su historial de confirmaciones (porque tiene copias de seguridad ... ¿verdad?).
Por lo tanto, en hg la restauración/retroceso equivalentes equivale más a cambiar lo que confirma una etiqueta de bifurcación, ¿hay alguna alteración real en la base de datos involucrada? – jthill