2011-01-24 16 views
13

Si hace un hg pull y luego un hg update (o un hg merge), ¿hay alguna manera de respaldar esto? Es decir: ¿revertir su repositorio al estado antes de hacer el hg pull?Cómo revertir un mercurial hg pull?

Creo que puede hacer hg update -r n donde especificaría el conjunto de cambios antes de la extracción como n. Aunque supongo que esto aún dejará los conjuntos de cambios en su repositorio, pero esto no es realmente lo que queremos. ??

Respuesta

11

hg strip eliminará las revisiones de un repositorio. Como todos los comandos poderosos, es peligroso, así que ten cuidado.

https://www.mercurial-scm.org/wiki/StripExtension

Véase también:

https://www.mercurial-scm.org/wiki/EditingHistory

Si descubre a su error inmediatamente (o razonablemente breve), que sólo puede utilizar hg tira REV para hacer retroceder el últimos (uno o más) cambios. ...

+1

Parece que funciona - 'hg strip x' donde' x 'es el primer conjunto de cambios en la extracción parece hacer el truco. Después de que 'hg out' aparezca vacío, que es lo que queremos ... –

+1

Clonar el repositorio para tener una copia de seguridad parece ser una buena idea. SourceTree en OSX puede quitar, al acceder haciendo clic derecho en una revisión. – ftvs

+0

¿Por qué no volver al rev deseado? ¿O esto realmente mata a la historia y eso se desea sobre revertir por alguna razón? –

2

hg --rollback se puede utilizar para deshacer la última transacción, siempre que su hg pull siga siendo la transacción más reciente, entonces puede usar eso. Sin embargo, este comando debería usarse con cuidado. Ver here para más detalles.

+0

En mi caso hice un pull, una fusión, luego un commit (de la fusión). Entonces me di cuenta de que quería respaldar TODO esto. 'hg rollback', déjame retroceder la confirmación, pero no veo cómo retroceder la extracción. –

+1

Hay un nivel de historial de reversión, así que tendremos que ver si alguien más publica una sugerencia diferente – mikej

0

puede:

hg update -C <version> 

ver el mercurial FAQ.

+1

Eso parece actualizar mis archivos de trabajo al estado antes de la extracción y fusión. PERO un 'hg out' todavía muestra los conjuntos de cambios que bajé ... y un' hg push' los empujaría al repositorio central, lo cual NO quiero hacer. –

0

Si desea eliminar todos los rastros de la tira de formar su historia, entonces es necesario utilizar una extensión como Bert F sugiere (en la filosofía de mercurio es no cambiar la historia)

si no importa el historial que contiene su error, tiene dos opciones ligeramente diferentes hg update -C -r que crearán una nueva bifurcación en la versión que especifique o hg revert -r que permanecerá en la misma bifurcación pero creará un nuevo cambio sin compromiso deshaciendo todo.

6

Ok, no puede deshacer porque ha realizado una confirmación. Lo que puede hacer es usar 'hg strip', que es parte de mq (después de que 2.8 Stripes esté en su propia extensión), o use mq para eliminar los cambios. De cualquier manera, te sugiero que hagas todo en otro clon, por las dudas.

Para hacer tira, actualización de una revisión en la que desea guardar, y luego

hg strip <REV> 

donde <REV> es la primera revisión que desea eliminar. Eliminará ese y todos los descendientes (incluido el compromiso de fusión).

alternativa, se puede

hg qnew (if you don't already have a patch queue) 
hg qimport <REV> 

que importar una única revisión en la cola de parche. A continuación, puede agregar más y luego usar los comandos mq para editar, reorganizar, eliminar o lo que quiera hacer con esas revisiones. qdel borra el parche actual.


Editar: Obviamente, tendrá que habilitar la extensión MQ para ambos, a menos que estés usando 2.8 o posterior. En ese caso, la tira está en la extensión de la tira, y mq en la extensión mq. Ambos se envían con la instalación estándar.

Cuestiones relacionadas