El tutorial Colas de Mercurial es terrible para este caso de uso. Todos los ejemplos que he visto suponen que todavía tiene que hacer una confirmación y está actualizando un solo parche. La mayoría de las veces este no es el caso, y usted tiene 2 o 3 commits que desea aplastar juntos o cambiar de alguna otra manera.
Digamos que tiene este tipo de historia:
---O---O---A---B---C
El primer ejemplo es que la calabaza se compromete A, B y C. En primer lugar mq init:
$ hg qinit
Ahora necesitamos " importe "commits A, B y C en la cola de parches. Supongamos que son los últimos 3 commits. Podemos utilizar la sintaxis "N" revisión de importarlos de este modo:
$ hg qimport -r -3:-1
Eso significa importación como parches de 3 parches de nuevo hasta la última confirmación. Puede verificar el estado de estos parches con hg qseries
. Debe mostrar algo como esto:
$ hg qseries
101.diff
102.diff
103.diff
donde los números 101, 102 y 103 corresponden a los números de revisión locales de los commit A, B y C. Ahora bien, estos parches son aplica, lo que significa que los cambios ellos describen ya están en la copia de trabajo. Puede deshacerse de los cambios de la copia de trabajo y eliminarlos del historial de confirmaciones, guardándolos solo en forma de parche, utilizando hg qpop
. Puede decir hg qpop; hg qpop
para sacar los cambios C y B de la pila, o especificar un parche para "pop to". En este caso, sería algo como esto:
$ hg qpop 101.diff
now at: 101.diff
Ahora tiene los parches para las confirmaciones B y C en la cola de parche, pero no se aplican (los cambios se han "perdido" - que sólo existen en el área de la cola de parches). Ahora puede plegar estos parches en el último, es decir, creamos un nuevo compromiso que es el equivalente a la suma de los cambios A + B + C.
$ hg qfold -e 102.diff 103.diff
Esto mostrará su editor para que pueda cambiar el mensaje de confirmación.Por defecto, el mensaje será la concatenación de los mensajes de confirmación para los cambios A, B y C, separados por asteriscos. Lo bueno aquí es que hg qfold
completará con pestañas los parches si está utilizando bash y tiene el script hg-completion sourced. Esto deja a la historia como esta, en la que A + B + C es una única confirmación de que es la combinación de los 3 parches que nos interesan:
---O---O---A+B+C
Otro caso de uso es si tenemos el mismo tipo de historia como antes , pero queremos dejar el parche B y fusionar A + C. Esto es bastante similar a lo de arriba en realidad. Cuando se llega a la etapa de qfold, sólo tendría que doblar por la última confirmación en lugar de los 2 últimos se compromete:
$ hg qfold -e 103.diff
Esto deja el cambio para B en la cola de parches, pero no se aplica a la copia de trabajo y su compromiso no está en la historia. Se puede ver esto ejecutando:
$ hg qunapplied
102.diff
La historia ahora se ve así, en la que A + C es una única confirmación que combina cambios A y C:
---O---O---A+C
Un caso de uso final podría ser que es necesario aplicar solamente cometer C. se podría hacer esto mediante la ejecución del qimport que el anterior, y que le sobresalen de todos los parches que no quería:
$ hg qpop -a
el medio indicador -a sobresalen de todos los parches. Ahora puede aplicar solamente desde el que quieres:
$ hg qpush 103.diff
Esto le deja con esta historia:
---O---O---C
Una vez que haya terminado con todo esto, es necesario acabar con el trasteo cola. Esto se puede hacer con:
$ hg qfinish -a
Así que ahí estamos. Ahora puede ejecutar hg push
y solo cometer exactamente lo que quiere, o hg email
un parche coherente a la lista de correo.
Hace poco pedí esto como un duplicado. No conocía la terminología, así que no encontré esto cuando busqué. Ver la respuesta aceptada en mi pregunta que implica hg injerto, nuevo en Mercurial 2.0. http://stackoverflow.com/questions/10288482/workflow-to-backport-change-into-different-mercucial-branch – oob