version control - control - Eliminar todos los conjuntos de cambios locales y volver al árbol
mercurial tutorial (7)
Cuando la forma más simple (un nuevo hg clone
) no es práctico, uso hg strip
, que viene con la extensión mq
:
% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing
Repita hasta que hg outgoing
permanezca en silencio. Tenga en cuenta que hg strip $rev
borra $rev
y todos sus descendientes.
PD: un enfoque aún más inteligente es usar el lenguaje de revolvente, y hacer:
% hg strip ''roots(outgoing())''
Estoy usando Mercurial y me metí en un lío terrible localmente, con tres cabezas. No puedo presionar, y solo quiero eliminar todos mis cambios locales y confirmaciones y comenzar de nuevo con un código totalmente limpio y un historial limpio.
En otras palabras, quiero terminar con (a) exactamente el mismo código localmente que existe en la punta de la rama remota y (b) sin historial de ninguna confirmación local.
Sé que hg update -C
sobrescribe cualquier cambio local. ¿Pero cómo elimino cualquier compromiso local?
Para ser claro, no tengo ningún interés en preservar el trabajo que he hecho localmente. Solo quiero la forma más simple de volver a una caja de compra local totalmente limpia.
De acuerdo. Así que simplemente elimine todas las cosas locales, hg init
el nuevo repositorio local y hg pull
el último consejo que tenga. No olvides hg update
después de esto.
Deberá crear un clon local donde solo conserve los conjuntos de cambios que también están presentes en el repositorio remoto. Use TortoiseHg , hg log
o similar para descubrir cuál de sus revisiones es la última revisión que no realizó (la anterior al inicio del desastre). El uso de hg outgoing
puede ayudar aquí; enumerará todos los conjuntos de cambios que haya realizado; elija un número de revisión antes que cualquiera de esos.
Si la revisión de destino se llama good
y su clon se llama foo
, haga lo siguiente:
hg clone -r good foo foo-clean
Esta será una operación local rápida, no hay razón para descargar todo de nuevo . El clon de foo-clean
solo contendrá conjuntos de cambios hasta la revisión. Ahora puede reemplazar foo-clean/.hg/hgrc
con foo/.hg/hgrc
para preservar la configuración del repositorio local, como la ruta predeterminada de inserción / extracción.
Cuando esté satisfecho de que foo-clean
tiene todo lo que necesita de foo
, simplemente elimine foo
y cambie el nombre de foo-clean
a foo
. Realice un hg pull
para obtener cualquier nuevo conjunto de cambios del repositorio remoto en su clon y continúe como siempre.
Si nadie ha enviado nuevos conjuntos de cambios al repositorio remoto, entonces es muy simple determinar qué revisión desea usar como good
arriba: hg id default
le dirá el ID de la sugerencia en el repositorio remoto.
Puedes utilizar
revisión de la tira de hg
para matar cualquier revisión y su subárbol en su repositorio local.
https://www.mercurial-scm.org/wiki/Strip
Pero no intentes usarlo para nada que ya haya sido empujado.
Si está usando TortoiseHg, una manera simple de salir de un lío (pequeño) es primero actualizar a la última revisión, luego seleccionar sus conjuntos de cambios e iniciar "fusionarse con local". Cuando aparezca el diálogo de fusión, simplemente haga clic en el pequeño ícono ''+'' para revelar algunas opciones adicionales, una de las cuales es "descartar conjuntos de cambios de la revisión del objetivo de fusión (otra)". Hacer esto significará que sus conjuntos de cambios seguirán en el repositorio y serán empujados, pero no tendrán ningún efecto, ya que serán descartados en la fusión. Si tiene muchos conjuntos de cambios que abarcan muchas cabezas, puede que no desee contaminar el repositorio de esta manera, pero es una solución simple y vale la pena considerar si los conjuntos de cambios que está descartando contienen datos que más adelante puede querer hacer referencia.
Simplemente elimine todo lo que tiene en su sistema local y vuelva a clonar el repositorio remoto.
hg strip `hg out --template "{rev} {author}/n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`
me sirve el truco
Elimina todas las revisiones que no se envían al repositorio predeterminado que se crean con su nombre de autor.
También puede usar este estilo para que no se verifique con el repositorio predeterminado, sino con otro Repositorio
hg strip `hg out OTHER_REPO_ALIAS --template "{rev} {author}/n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`