mercurial - ultimo - para qué sirve reset soft
Mercurial deshacer último compromiso (6)
¿Cómo puedo deshacer mi último cambio accidentalmente comprometido (no empujado) en Mercurial?
Si es posible, una forma de hacerlo con TortoiseHg sería preferible.
Actualizar
En mi caso concreto, cometí un conjunto de cambios (no empujado). Luego saqué y actualicé desde el servidor. Con estas nuevas actualizaciones, decidí que mi último compromiso es obsoleto y no quiero sincronizarlo. Entonces parece que esa hg rollback
no es exactamente lo que estoy buscando, porque revertiría la extracción en lugar de mi compromiso.
Como no puedes revertir, debes fusionar ese compromiso en la nueva cabeza que recibiste cuando sacaste. Si no quiere el trabajo que hizo en él, puede hacerlo fácilmente con este consejo .
Entonces, si lo has sacado y actualizado a su cabeza , puedes hacer esto:
hg --config ui.merge=internal:local merge
mantiene todos los cambios en la revisión actualmente desprotegida, y ninguno de los cambios en la revisión no desprotegida (la que usted escribió que ya no desea).
Esta es una gran manera de hacerlo porque mantiene su historial preciso y completo. Si dentro de 2 años alguien encuentra un error en lo que derribó, puede buscar en su implementación (no utilizada pero guardada) lo mismo e ir, "oh, lo hice bien". :)
Su solución.
Si no presiona hacia el servidor, clonará en la nueva carpeta else washout (borre todos los archivos) de su carpeta de repositorio y clonará la nueva.
Una forma sería (obsoleto a partir de Hg2.7, agosto de 2013) hg rollback
Utilice
hg commit --amend
lugar derollback
para corregir errores en el último commit.Revertir la última transacción en un repositorio.
Al comprometerse o merging , Mercurial agrega la última entrada al changeset .
Mercurial mantiene un registro de transacciones del nombre de cada archivo tocado y su longitud antes de la transacción. Al abortar, trunca cada archivo a su longitud anterior. Esta simplicidad es un beneficio de hacer que los revlogs solo. El diario de transacciones también permite una operación de deshacer.
Vea la sección Recuperación de TortoiseHg :
Este hilo también detalla la diferencia entre hg rollback
y hg strip
:
(escrito por Martin Geisler que también contribuye en SO)
''
hg rollback
'' eliminará la última transacción. Las transacciones son un concepto que a menudo se encuentra en las bases de datos. En Mercurial, iniciamos una transacción cuando se ejecutan ciertas operaciones, como commit, push, pull ...
Cuando la operación finaliza con éxito, la transacción se marca como completa. Si se produce un error, la transacción se "retrotrae" y el repositorio se deja en el mismo estado que antes.
Puede desencadenar manualmente una reversión con ''hg rollback''. Esto deshará el último comando transaccional. Si un comando de extracción trajo 10 nuevos conjuntos de cambios al repositorio en diferentes ramas, entonces ''hg rollback
'' los eliminará a todos. Tenga en cuenta que no hay respaldo cuando revierte una transacción.''
hg strip
'' eliminará un conjunto de cambios y todos sus descendientes. Los conjuntos de cambios se guardan como un paquete, que puede volver a aplicar si los necesita de vuelta.
ForeverWintr sugiere en los comentarios (en 2016, 5 años después)
Puede "
hg forget filea; hg commit --amend
" los archivos olvidándolos primero, por ejemplo:hg forget filea; hg commit --amend
hg forget filea; hg commit --amend
, pero eso parece poco intuitivo.
hg strip --keep
es probablemente una mejor solución para hg moderno.
después de haber sacado y actualizado su espacio de trabajo, haga un clic y haga clic derecho en el conjunto de cambios que desea eliminar y luego haga clic en modificar historial -> eliminar, se eliminará el conjunto de cambios y apuntará a la sugerencia predeterminada.
hg rollback
es lo que quieres.
En TortoiseHg, la hg rollback
lleva a cabo en el cuadro de diálogo de confirmación. Abra el diálogo de confirmación y seleccione "Deshacer".
hg strip
eliminará por completo una revisión (y cualquier descendiente) del repositorio.
Para utilizar la tira, deberá instalar MqExtension agregando las siguientes líneas a su .hgrc (o mercurial.ini):
[extensions]
mq =
En TortoiseHg, el comando strip está disponible en el banco de trabajo. Haga clic derecho en una revisión y elija ''Modificar historial'' -> ''Franja''.
Como la strip
cambia el historial del repositorio, solo debe usarlo en revisiones que aún no se hayan compartido con nadie. Si está usando mercurial 2.1+, puede usar las phases para rastrear esta información. Si una confirmación aún está en la fase de borrador, no se ha compartido con otros repositorios, por lo que puede quitarla con seguridad. (Gracias a Zasurus por señalar esto).