Descargo de responsabilidad: No soy un usuario de hg, así que he leído sobre hg pero no tengo mucha experiencia de primera mano al usarlo.
git proporciona varias herramientas muy potentes y flexibles para administrar ramas en un estilo 'patch queue', por lo que para muchos casos básicos (e incluso algunos bastante complejos), el git nativo es lo suficientemente potente.
Normalmente, la mayoría de los proyectos mantienen una rama principal estable central que solo adquiere nuevas confirmaciones y nunca se 'rebobina', por lo que las confirmaciones en la rama maestra son fijas.
Además de esto, un mantenedor (o un desarrollador) puede mantener una o más ramas fluidas de parches de trabajo en progreso (es decir, confirmaciones) que se basan en la rama estable.
Las actividades típicas Gestión de parche incluyen:
rebase la cola de parche sobre la rama estable lastest - utilizar git rebase
,
la duplicación de la cola de parche sobre una antigua rama maintentance - utilizar git branch
y git rebase
,
reordenando parches en la cola - use git rebase --interactive
(también conocido como git rebase -i
) usando un editor de texto para reordenar la cola.
parches aplastando - git rebase -i
utilizan con la directiva de squash
parches que alteran o parche se comprometen mensajes - utilizar git rebase -i
(detectar un tema?) Con la directiva de edición.
Cualquier actividad que altere un parche de alguna manera (es decir, su contenido, descripción o paternidad) creará un nuevo compromiso con un nuevo id. De confirmación para ese parche. El hecho de que los antiguos commits puedan ser descartados y reemplazados regularmente antes de ser promovidos a la rama principal estable es lo único que los convierte en una "cola de parches" en lugar de una sucursal, pero esta es una convención de proyecto más que cualquier diferencia física en los datos que componen los commits. Para git son objetos idénticos.
Para promover un parche a una confirmación "real", simplemente mueva el parche al principio de la cola y fúndalo en la rama principal. Después de mover el parche al principio de la cola, es lo mismo que una confirmación normal basada en la rama maestra, por lo que al fusionarlo solo se avanza rápidamente el puntero de la rama maestra para apuntar a la confirmación del parche.
Publicar este compromiso como un parche maestro "estable" es el acto que dice: esto es ahora un compromiso que no cambiará y es parte de la historia inmutable del proyecto.
Lo que pasa es que necesitamos tal cosa en git en una ocasión muy rara. – shabunc