Mercurial: ¿cómo modificar el último compromiso?
Estoy buscando una contraparte git commit --amend
en Mercurial, es decir, una forma de modificar la confirmación a la que está vinculada mi copia de trabajo. Solo me interesa el último compromiso, no un compromiso anterior arbitrario.
Los requisitos para este procedimiento de modificación son:
si es posible, no debería requerir ninguna extensión. No debe requerir extensiones no predeterminadas , es decir, extensiones que no vienen con una instalación oficial de Mercurial.
Si el compromiso de modificación es un jefe de mi rama actual, no se debe crear ningún jefe nuevo . Si la confirmación no es un encabezado, se puede crear un nuevo encabezado.
el procedimiento debe ser seguro de manera que, si por cualquier motivo la enmienda falla, quiero restaurar la misma copia de trabajo y el mismo estado del repositorio que antes de la enmienda. En otras palabras, si la modificación en sí misma puede fallar, debería haber un procedimiento a prueba de fallas para restaurar la copia de trabajo y el estado del repositorio. Me refiero a "fallos" que se encuentran en la naturaleza del procedimiento de modificación (como, por ejemplo, conflictos), no a problemas relacionados con el sistema de archivos (como restricciones de acceso, no poder bloquear un archivo para escribir,... )
Actualización (1):
- El procedimiento debe ser automatizable , por lo que puede ser realizado por un cliente GUI sin necesidad de interacción del usuario.
Actualización (2):
- Los archivos en el directorio de trabajo no deben tocarse (puede haber bloqueos del sistema de archivos en ciertos archivos modificados). Esto significa especialmente que un posible enfoque puede no requerir en ningún momento un directorio de trabajo limpio.
Ahora puede usar la --amend
opción con hg commit
para actualizar la última confirmación con el directorio de trabajo actual, desde el lanzamiento de Mercurial 2.2 .
De la referencia de la línea de comando :
El indicador --amend se puede utilizar para modificar el directorio principal del directorio de trabajo con una nueva confirmación que contenga los cambios en el directorio principal además de los reportados actualmente por hg status, si los hay. La confirmación anterior se almacena en un paquete de respaldo en .hg/strip-backup (consulte el paquete de ayuda de hg y el paquete de ayuda de hg sobre cómo restaurarlo).
El mensaje, el usuario y la fecha se toman del compromiso modificado a menos que se especifique. Cuando no se especifica un mensaje en la línea de comando, el editor se abrirá con el mensaje de la confirmación modificada.
Lo bueno es que este mecanismo es "seguro", porque se basa en la función "Fases" para evitar actualizaciones que cambiarían el historial que ya está disponible fuera del repositorio local.
Tienes 3 opciones para editar confirmaciones en Mercurial:
hg strip --keep --rev -1
Deshaga las últimas (1) confirmaciones, para poder hacerlo nuevamente (consulte esta respuesta para obtener más información).Usando la extensión MQ , que se envía con Mercurial
Incluso si no viene con Mercurial, vale la pena mencionar la extensión Histedit .
También puedes echar un vistazo a la página Historial de edición de la wiki de Mercurial.
En resumen, editar la historia es realmente difícil y no se recomienda . Y si ya ha realizado sus cambios, apenas hay nada que pueda hacer, excepto si tiene el control total de todos los demás clones.
No estoy muy familiarizado con el git commit --amend
comando, pero AFAIK, Histedit es lo que parece ser el enfoque más cercano, pero lamentablemente no viene con Mercurial. MQ es realmente complicado de usar, pero puedes hacer casi cualquier cosa con él.
Equivalente GUI para hg commit --amend
:
Esto también funciona desde la GUI de TortoiseHG (estoy usando v2.5):
Cambie a la vista 'Confirmar' o, en la vista del banco de trabajo, seleccione la entrada 'directorio de trabajo'. El botón 'Confirmar' tiene una opción llamada 'Modificar revisión actual' (haga clic en la flecha desplegable del botón para encontrarla).
||
||
\/
Advertencia emptor :
Esta opción adicional solo se habilitará si la versión de Mercurial es al menos 2.2.0 y si la revisión actual no es pública, no es un parche y no tiene hijos. [...]
Al hacer clic en el botón se llamará 'commit --amend' para 'modificar' la revisión.
Más información sobre esto en el canal de desarrollo de THG.