precio - Mercurial: decapitación de una cabeza
mercurial svn (7)
Primero que nada, escriba:
hg heads
Imagina, tienes tres cabezas en la lista:
changeset: 223:d1c3deae6297
user: Your name <[email protected]>
date: Mon Jun 09 02:24:23 2014 +0200
summary: commit description #3
changeset: 123:91c5402959z3
user: Your name <[email protected]>
date: Sat Dec 23 16:05:38 2013 +0200
summary: commit description #2
changeset: 59:81b9804156a8
user: Your name <[email protected]>
date: Sat Sep 14 13:14:40 2013 +0200
summary: commit description #1
Digamos que desea mantener activa la última cabeza (223) y cerrar el resto.
Entonces harías lo siguiente:
Cabeza cerrada # 59
hg up -r 59
hg ci --close-branch -m "clean up heads; approach abandoned"
Cabeza cerrada # 123
hg up -r 123
hg ci --close-branch -m "clean up heads; approach abandoned"
Confirmar los cambios
hg push
No te olvides de cambiar a la cabeza derecha al final
hg up -r 223
Y tu estas listo.
Hay una confirmación que simplemente no funcionó, así que quiero abandonarla sin eliminarla del historial.
Actualicé una revisión anterior y me comprometí, creando así una nueva cabeza.
No tengo sucursales, no quiero sucursales, simplemente quiero seguir con la nueva cabeza exactamente como está, nada sofisticado, sin fusión, sin preocupaciones, solo sigo olvidando la anterior.
Parece que no puedo encontrar la manera de hacerlo, y estoy empezando a creer que no se puede hacer. Todo lo que encuentro es algo sobre ramas, o cosas sobre fusionarse.
Desea usar hg backout
. Esto elimina los cambios realizados por el conjunto de cambios de cualquier conjunto de cambios hijo.
Mira esto para una buena explicación. Retroceso mercurial
Las respuestas de Niall y Nick son directas. Como me encuentro creando muchas cabezas colgantes, terminé escribiendo un alias para cerrar las cabezas más fácilmente. Al agregar esto a su .hgrc
:
[alias]
behead = !REV=$($HG id -i); $HG update $@ -q && $HG ci --close-branch -m "Closing dead head" && $HG update $REV -q
(si ya tiene una sección [alias]
, puede agregarla)
Ahora puede cerrar un encabezado en un solo comando (y sin tener que actualizar manualmente a un conjunto de cambios diferente) como este:
$ hg behead 123
Nota: el alias aprovecha el hecho de que los alias Mercurial pueden ser comandos de shell . Esto significa que esto probablemente solo funcionará en UNIX, no en Windows.
Me he encontrado con este problema muchas veces cuando quiero decapitar una cabeza que se creó por error. Siempre quiero ver que desaparezca de la faz de la Tierra.
En su copia local, obtenga la última y luego:
Encuentre el comienzo de una cabeza que desea quitar (donde un nuevo cuello comienza a ramificarse), obtenga el número de revisión
Pelarlo.
Fuente: TipsAndTricks .
Fuente: PruningDeadBranches#Using_strip .
hg --config extensions.hgext.mq= strip -n <rev>
- Realice una actualización trivial de archivos (agregue un espacio en blanco a un archivo), confirme y presione.
Su repositorio ahora debería tener la cabeza despojada. El último paso es importante ya que pelar no crea ningún cambio que pueda enviar a su repositorio central. Sin el último paso, solo has despojado la cabeza localmente.
Puede clonar su repo corrupto a uno nuevo sin clonar esa cabeza no deseada. A continuación, elimine el antiguo repositorio, mueva el clon recién creado al lugar original y continúe trabajando con él. Esto llevará algún tiempo, pero obtendrá un repositorio perfectamente limpio sin un signo de esa revisión no deseada.
hg clone --rev myGoodResition myDirtyRepo myCleanRepo
Sé que no quieres trabajar con sucursales en esta etapa, lo cual está bien, pero eso es exactamente lo que has hecho. Cuando volviste a una versión anterior y cometiste algo que funcionó, creaste una rama: una rama sin nombre, pero una rama de todos modos.
No hay problema con seguir adelante tal como eres y sin preocuparte por tener múltiples cabezas, pero si quieres arreglar las cosas para que no accidentalmente elijas la cabeza equivocada una vez, entonces puedes matar la vieja rama.
Hay una buena sección en la documentación de Mercurial que te lleva a través de una serie de opciones en torno a Poda ramas muertas .
Creo que la mejor opción para ti es marcar la rama anterior como "cerrada". Si su cabeza anterior es la revisión "123", entonces:
hg update -r 123
hg commit --close-branch -m ''Closing old branch''
hg update -C default
Actualice su repositorio a la cabeza con la revisión que desea olvidar, luego use la opción --close-branch
para hg commit
para marcar esa rama (anónima) como cerrada. Luego actualice al jefe de la sucursal que desee y continúe trabajando.
Todavía puedes ver la rama cerrada si usas la opción -c
para hg heads
, pero no aparecerá de manera predeterminada y hg merge
sabrá que no intenta fusionarse con la cabeza cerrada.
Deberá usar hg push --force
la primera vez que presione este encabezado cerrado a otro repositorio ya que en realidad crea encabezados adicionales en el repositorio remoto cuando presiona. Así que dile a Mercurial que esto está bien con --force
. La gente que jala la cabeza cerrada no se molestará con ninguna advertencia.