Solo hay un nivel de retrotracción porque la reversión nunca fue realmente una función. Rollback existe, y tiene un nombre extraño, porque surgió del sistema de transacción commit/push/pull de mercurial.
Si entra una inserción de red y se hace un 99% y luego se pierde la conexión, el repositorio no se debe dejar en un estado incoherente. Para asegurarse de que un cambio incompleto puede descartarse, se crea un puntero "antes de que ocurra nada" antes de que se realice cualquier escritura y, si el cambio se cancela, todo se restablece a ese estado, retrocedido.
El comando rollback
simplemente está "fallando" la operación anterior después de que se completó correctamente. Es algo que "salió gratis" después de que se diseñó la seguridad transaccional necesaria.
Cuando se utiliza algo como controlling hook, se pueden definir verificaciones/pruebas que deben pasarse para que un empuje o compromiso se complete satisfactoriamente. Para no completar correctamente, debe ser posible deshacer esa confirmación en curso, pero eso tampoco requiere niveles múltiples.
Como VonC nota correctamente la reversión puede ser bastante peligroso. Muchos cambios de retroceso de una persona que ya han empujado y luego se confunden mucho cuando otros cambios vuelven en tiradas posteriores. El comando hg backout
es casi siempre una mejor idea.
también señalan que puede simular un retroceso a cualquier punto en el tiempo fácilmente al hacer esto:
hg clone -r last_revision_I_want repo_with_things_I_do_not_want new_repo_with_only_good_stuff
Desde mi entender, su conjetura es bastante bien precisa. El camino mercurial es 'todo es inmutable' ... así que si necesitas revertir algo que cometiste 8 revisiones atrás, la forma 'hg' es introducir un nuevo cambio que lo haga. –