¿Cómo hacer el equivalente de git checkout <commit> en mercurial con subrepositorys?

Según Mercurial GitConcepts, el equivalente de git reset --hard is hg revert -a --no-backup git reset --hard hg revert -a --no-backup . Después de hacer eso, espero que funcione el equivalente de git checkout <commit> que es hg update -c <cset> .

Sin embargo, falla con el abort: uncommitted changes in subrepository 'subrepo/subsubrepo' error abort: uncommitted changes in subrepository 'subrepo/subsubrepo' incluso después de ejecutar hg revert -a --no-backup en subrepo/subsubrepo y subrepo .

Hasta donde puedo decir, el problema es que Mercurial rastrea el compromiso de subrepo asociado con cada compromiso de recompra principal . Por lo tanto, no es suficiente asegurar que tanto el subrepo como el repository principal estén "limpios". También debe asegurarse de que el subrepo se actualice a la confirmación que corresponde a la confirmación del repository principal.

En mi opinión, hg revert es más problemático de lo que vale en la mayoría de los casos (también se comporta de manera extraña cuando quieres cancelar una fusión). Si solo quiere hacer que el repository se vea como el padre del directory de trabajo, generalmente es más infalible hacerlo hg up -C . (nota capital -C , y restring que esto no deja ninguna copy de security); puedes replace con algún otro compromiso para actualizar a ese compromiso en un solo paso. Como la actualización es recursiva, esto debería funcionar correctamente en un subrepo. Sin embargo, operará de manera recursiva en todo el repository, incluidos los subrepos, con un solo command, por lo que debe asegurarse de no eliminar los cambios que pretende mantener.