¿Cómo puedo deshacer mi último cambio cometido accidentalmente (no presionado) en Mercurial?
Si es posible, se preferiría una forma de hacerlo con TortoiseHg.
Actualizar
En mi caso concreto, cometí un conjunto de cambios (no presionado). Luego saqué y actualicé desde el servidor. Con estas nuevas actualizaciones decidí que mi último commit está obsoleto y no quiero sincronizarlo. Entonces, parece que eso hg rollback
no es exactamente lo que estoy buscando, porque revertiría el pull en lugar de mi commit.
mercurial
tortoisehg
mercurial-commit
Martin Buberl
fuente
fuente
hg rollback
y luego tirar de nuevo?strip --keep
: stackoverflow.com/questions/29413851/… resuelve directamente la tarea, al igual que MQ qimport. Alternativamente, puede ser mejor simplementerebase
en el escenario si los cambios locales también se mantienen y no hay conflicto. (Use una combinación para mantener algunos cambios combinados de ambas ramas cuando ese es el objetivo final del gráfico deseado, especialmente en un caso no rápido). También puede ser válido solo para cerrar la rama, que todavía 'conserva el historial' (pero diferente a una fusión) dependiendo del estado final deseado.hg strip --keep
es el comando de hacer uso, pero es necesario proporcionar una revisión, por ejemplo:hg strip --keep -r .
. Esta respuesta explica bien stackoverflow.com/a/19064016/1286571Respuestas:
Una forma sería
(en desuso a partir de Hg2.7, agosto de 2013)hg rollback
Vea la sección de recuperación de TortoiseHg :
Este hilo también detalla la diferencia entre
hg rollback
yhg strip
:(escrito por Martin Geisler, quien también contribuye en SO)
ForeverWintr sugiere en los comentarios (en 2016, 5 años después)
fuente
hg rollback
deshacerá el tiro en lugar de la confirmación.hg commit --amend
se supone que funciona, pero para mí me dio un editor para modificar el mensaje de confirmación y ningún método para cambiar qué archivos se incluyeron. Salí del editor sin guardar y descubrí que mi confirmación errónea se cambió para incluir TODOS los archivos modificados.hg commit --amend
. Puede 'des-confirmar' los archivos seleccionándolos primerohg forget
, por ejemplo:,hg forget filea; hg commit --amend
pero eso parece poco intuitivo. hg strip --keep es probablemente una mejor solución para el hg moderno.hg strip
eliminará por completo una revisión (y cualquier descendiente) del repositorio.Para usar strip necesitará instalar MqExtension agregando las siguientes líneas a su .hgrc (o mercurial.ini):
En TortoiseHg, el comando strip está disponible en el banco de trabajo. Haga clic derecho en una revisión y elija 'Modificar historial' -> 'Tira'.
Dado que
strip
cambia el historial del repositorio, solo debe usarlo en revisiones que aún no se hayan compartido con nadie. Si está utilizando mercurial 2.1+, puede usar fases 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 eliminarla de forma segura. (Gracias a Zasurus por señalar esto).fuente
Como no puede retroceder, debe fusionar ese compromiso con la nueva cabeza que obtuvo cuando tiró. Si no quieres nada del trabajo que hiciste en él, puedes hacerlo fácilmente con este consejo .
Entonces, si ha sacado y actualizado a su cabeza , puede hacer esto:
mantiene todos los cambios en la revisión actualmente desprotegida, y ninguno de los cambios en la revisión no desprotegida (la que escribió que ya no desea).
Esta es una excelente manera de hacerlo porque mantiene su historial preciso y completo. Si dentro de 2 años alguien encuentra un error en lo que usted derribó, puede ver su implementación (no utilizada pero guardada) de lo mismo y decir "oh, lo hice bien". :)
fuente
hg rollback
es lo que quieresEn TortoiseHg, esto
hg rollback
se logra en el diálogo de confirmación. Abra el diálogo de confirmación y seleccione "Deshacer".fuente
En la versión actual de TortoiseHg Workbench 4.4.1 (07,2018) que puede utilizar
Repository
-Rollback/undo...
:fuente
Su solución alternativa.
Si no empuja al servidor, clonará en una nueva carpeta, de lo contrario, eliminará (eliminará todos los archivos) de su carpeta de repositorio y clonará nuevo.
fuente
después de haber extraído y actualizado su espacio de trabajo, haga un clic y haga clic derecho en el conjunto de cambios del que desea deshacerse y luego haga clic en modificar historial -> tira, eliminará el conjunto de cambios y señalará la sugerencia predeterminada.
fuente