Estoy usando Mercurial y me he metido en un lío terrible a nivel local, con tres cabezas. No puedo presionar, y solo quiero eliminar todos mis cambios y confirmaciones locales 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 confirmaciones locales.
Sé que hg update -C
sobrescribe los cambios locales. Pero, ¿cómo elimino las confirmaciones locales?
Para ser claros, no tengo ningún interés en preservar el trabajo que he realizado a nivel local. Solo quiero la forma más sencilla de volver a una caja local totalmente limpia.
version-control
mercurial
dvcs
head
Ricardo
fuente
fuente
Respuestas:
Cuando la forma más simple (una nueva
hg clone
) no es práctica, usohg strip
:Repita hasta que se
hg outgoing
quede quieto. Tenga en cuenta quehg strip $rev
borra$rev
y todos sus descendientes.Tenga en cuenta que es posible que primero
strip
deba habilitarlo en la configuración de Mercurial .PD: un enfoque aún más inteligente es usar el lenguaje revset y hacer:
fuente
hg strip 'roots(outgoing())'
ir al trabajo debido a que no lo reconoce'roots(outgoing())'
. Pude hacer que funcionarahg strip "roots(outgoing())"
.cmd.exe
, sí.Querrá hacer un clon local en el que conserve solo los conjuntos de cambios que también están presentes en el repositorio remoto. Use TortoiseHg ,
hg log
o similar para averiguar cuál de sus revisiones es la última revisión que no hizo (la anterior a que comenzara el desorden). Utilizandohg outgoing
puede ayudar aquí, enumerará todos los conjuntos de cambios que realizó, elija un número de revisión anterior a cualquiera de esos.Si se llama a la revisión de destino y se llama a
good
su clonfoo
, haga lo siguiente:Esta será una operación local rápida; no hay razón para descargar todo de nuevo . El
foo-clean
clon solo contendrá conjuntos de cambios hasta la revisióngood
. Ahora puede reemplazarfoo-clean/.hg/hgrc
confoo/.hg/hgrc
para preservar la configuración local del repositorio, como la ruta push / pull predeterminada.Cuando esté satisfecho de que
foo-clean
tiene todo lo que necesitafoo
, simplemente eliminefoo
y cambie el nombrefoo-clean
afoo
. Haga unahg pull
para obtener nuevos conjuntos de cambios del repositorio remoto en su clon y continúe como de costumbre.Si nadie ha enviado nuevos conjuntos de cambios al repositorio remoto, entonces es muy simple determinar qué revisión desea usar como se indica
good
arriba:hg id default
le dirá el ID de la sugerencia en el repositorio remoto.fuente
hg pull -r
para la última revisión "buena" de cada rama adicional.Okay. Así que simplemente elimine todo el material local,
hg init
el nuevo repositorio local yhg pull
el último consejo que tenga. No te olvides dehg update
después de esto.fuente
hg init
+hg pull
=hg clone
La diferencia es quehg clone
hace un buen.hg/hgrc
archivo para usted yhg clone
usará enlaces duros para ahorrar espacio al clonar en el mismo sistema de archivos.hg help init
está aquí: selenic.com/mercurial/hg.1.html#init ¿ Pero quizás eso es demasiado conciso? Envíe un correo a nuestra lista de correo si necesita más ayuda. Ver: mercurial.selenic.com/wiki/MailingListsPuedes utilizar
para matar cualquier revisión y su subárbol en su repositorio local.
https://www.mercurial-scm.org/wiki/Strip
Pero no intente usarlo para nada que ya haya sido promocionado.
fuente
Simplemente elimine todo lo que tenga en su sistema local y vuelva a clonar el repositorio remoto.
fuente
hace el truco por mí.
Elimina todas las revisiones que no se envían al repositorio predeterminado que se crean con su nombre de autor.
También puede utilizar este estilo para que no se verifique con el repositorio predeterminado sino con otro repositorio.
fuente
Si está utilizando TortoiseHg, una forma sencilla de salir de un (pequeño) lío es actualizar primero a la última revisión, luego seleccionar sus conjuntos de cambios e iniciar "fusionar con local". Cuando aparezca el diálogo de combinación, simplemente haga clic en el pequeño icono '+' para revelar algunas opciones adicionales, una de las cuales es "descartar conjuntos de cambios de la revisión de destino de combinación (otra)". Hacer esto significará que sus conjuntos de cambios seguirán estando en el repositorio y serán empujados, pero no tendrán ningún efecto, porque se descartarán en la fusión. Si tiene muchos conjuntos de cambios que abarcan muchas cabezas, es posible 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 a los que más adelante querrá hacer referencia.
fuente