2010-03-24 16 views
51

Estoy empezando con Mercurial, y me he encontrado con algo que no entiendo.Diferencia entre Revertir y Actualizar en Mercurial

Realicé cambios en varios archivos, y ahora quiero deshacer todos los cambios que realicé en uno de ellos (es decir, volver a mi última confirmación para un archivo específico).

Por lo que puedo ver, el comando que quiero es revert.

En la página que está conectado, existe la siguiente declaración:

Esta operación, sin embargo no cambia la revisión de los padres de la directorio de trabajo (o revisiones en caso de una fusión no comprometidos). Para deshacer una fusión sin procesar , puede usar "hg update -C -r." que restablecerá los padres al primer padre.

No entiendo la diferencia entre el (frente a hg reverthg update -C -r) dos. ¿Alguien puede iluminarme en cuanto a la diferencia? Y en mi caso, ¿realmente quiero que la reversión o la actualización eliminen los cambios que hice en el archivo?

+0

Para realmente ver la diferencia, debe intentar con 'revertir -r', luego use el estado de hg, verá la diferencia :) – tonfa

Respuesta

63

La primera diferencia es que puede funcionar en un subconjunto de la copia de trabajo mientras la actualización funciona en la copia de trabajo completa. la otra diferencia está en lo que sucede cuando quieres volver a una versión que no sea la última comprometida.

si tenemos revisiones (tapas se han comprometido, en minúsculas son los cambios en la copia de trabajo, la revisión de los padres es C)

A-B-C-d 

update -C -r B le dará

A-B-C 

con su conjunto de copia de trabajo a B, cualquier cambio dará como resultado una bifurcación desde B (revisión principal establecida en B)

A-B-C 
    \e 

revert -r B le dará

A-B-C-b' 

donde b 'es un conjunto de cambios que deshace todo en los cambios confirmados intermedios, en este caso se deshace todos los cambios C. ahora simplemente se unen al b' set (revisión de los padres se dejó sin cambios en C)

+6

Su explicación de cómo revertir/actualizar a una revisión que no sea lo último es excelente. Permítanme agregar que la oración en la ayuda que menciona esta distinción es "no cambia la revisión principal del directorio de trabajo". En los ejemplos de jk, la "revisión principal del directorio de trabajo" comienza como C. Con la actualización termina como B, y con la inversión sigue siendo C ("no cambia"). En cualquier caso, se puede ver con "hg parents". Además, el "revertir puede trabajar en un subconjunto de la copia de trabajo" proviene de esto: el único padre que trabaja es el padre y todos los archivos lo comparten. –

+0

buen punto, agregó cuál es la revisión principal en cada punto –

+0

Cool, gran respuesta a una pregunta frecuente. –