Mi pregunta es la siguiente:¿Cómo fusionarse para deshacerse de la cabeza con la línea de comandos de Mercurial, como puedo hacer con TortoiseHg?
- Si tengo dos cabezas (ramas con cambios) en mi repositorio Mercurial, y me gustaría deshacerse de uno de ellos, pero descartar todos los cambios de esa rama en vez de fusionarlos en el otro, y no puedo quitar esos conjuntos de cambios, así que tengo que fusionarme, ¿cómo puedo hacer eso con el cliente de la línea de comandos?
Si tengo dos cabezas en mi repositorio Mercurial, y el uso de TortoiseHg como mi cliente, el repositorio podría tener este aspecto:
Entonces puede deshacerse de la test2
Dirígete haciendo una fusión y descartando. Primero actualizaría al encabezado que me gustaría conservar (test3
en este caso, que en la imagen anterior ya es el padre actual de mi carpeta de trabajo). Entonces me gustaría hacer clic derecho y seleccionar "Combinar con ...":
y en el diálogo que aparece, yo elegiría para descartar los cambios con respecto al objetivo de combinación (es decir, la rama I'. d como para descartar todos los cambios desde):
Después de esta fusión ha tenido que pasar, todos los cambios en la cabeza test2
ha sido descartada, y pueden cometer. La cabeza ahora ha desaparecido, pero el conjunto de cambios sigue siendo parte de la historia.
Mi pregunta es esta: ¿Cómo puedo hacer lo mismo usando solo el cliente de línea de comando? No puedo encontrar ningún opciones de concordancia a la orden hg merge
:
hg merge [-P] [-f] [[-r] REV] merge working directory with another revision ... snipped text options: -f --force force a merge with outstanding changes -t --tool VALUE specify merge tool -r --rev REV revision to merge -P --preview review revisions to merge (no merge is performed) --mq operate on patch repository use "hg -v help merge" to show global options
Editar: debugsetparents trabajaron muy bien:
hg debugsetparents . 1 hg commit -m "merged to get rid of changeset #1"
Editar: intenta utilizar el
--tool internal:local
acuerdo a una de las respuestas:
@echo off
setlocal
if exist repo rd /s /q repo
hg init repo
cd repo
rem revision 0
echo >test1.txt
hg commit -m "test1" --addremove
rem revision 1
echo >test2.txt
hg commit -m "test2" --addremove
rem revision 2
hg update 0
echo >test3.txt
hg commit -m "test3" --addremove
rem now let's get rid of change in revision 1 with merge
hg merge --tool internal:local -r 1
hg commit -m "merged"
dir
salida de ejecución:
[C:\Temp] :test adding test1.txt adding test2.txt 0 files updated, 0 files merged, 1 files removed, 0 files unresolved adding test3.txt created new head 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) Volume in drive C is unlabeled Serial number is 0e17:6aba Directory of C:\Temp\repo\* 16.11.2010 20:05 . 16.11.2010 20:05 .. 16.11.2010 20:05 .hg 16.11.2010 20:05 13 test1.txt 16.11.2010 20:05 13 test2.txt 16.11.2010 20:05 13 test3.txt 39 bytes in 3 files and 3 dirs 12 288 bytes allocated 66 600 316 928 bytes free
Aquí los cambios introducidos en el segundo conjunto de cambios (el uno con el número de revisión 1), está presente en el conjunto de cambios fusionada. Esto no es lo que yo quería.
'hg debugsetparents. REV2' seguido de 'hg merge' funcionó bien, gracias. –
Muy útil para un desarrollador de iOS que tenemos usando MacHG que no admite la función "Descartar todos los cambios de la fusión de objetivo (otra) revisión". –
Solo por mi propia referencia (ya que a menudo vuelvo aquí, tratando de recordar esto): uno quiere ejecutar 'hg debugsetparents'. Esto puede deducirse de los documentos de ayuda pero no es exactamente * obvio *. –