started git mercurial merge dvcs

git - started - dashboard bitbucket



¿Cómo puedo reiniciar-hard HEAD en Mercurial? (4)

Desde git, comandos:

git reset --hard # reset to last commit git clean -df # delete untracked files

son iguales a

hg update --clean # reset to last commit hg purge # delete untracked files

Soy un usuario de Git tratando de usar Mercurial.

Esto es lo que sucedió: hice un hg backout en un conjunto de cambios que quería revertir. Eso creó una nueva cabecera, así que hg me ordenó que fusionara (de nuevo a "predeterminado", supongo). Después de la fusión, me dijo que todavía tenía que comprometerme. Luego me di cuenta de algo que hice mal al resolver un conflicto en la fusión, y decidí que quería tenerlo todo como antes del hg backout del hg backout , es decir, quiero que esta fusión no confirmada desaparezca. En Git, estas cosas no comprometidas estarían en el índice y yo solo haría un git reset --hard HEAD para borrarlo pero, por lo que he leído, el índice no existe en Mercurial. Entonces, ¿cómo me retiro de esto?


Esto está cerca:

hg update --clean


La página de GitConcepts del Manual de GitConcepts explica cómo realizar muchas acciones con las que los usuarios de GitConcepts están familiarizados en Mercurial.

Mercurial no tiene ningún comportamiento de git reset --hard . Sin embargo, la extensión de strip proporciona un comando de strip que hace. Para usarlo, primero habilite la strip en su archivo ~/.hgrc ::

[extensions] strip =

Nota: esta extensión es nueva en Mercurial-2.8. Las versiones anteriores proporcionaban el comando de strip en la extensión mq .

Ahora puede ejecutar comandos como hg strip o incluso hg help strip . Para eliminar un conjunto de cambios y todos sus elementos secundarios, simplemente especifique ese conjunto de cambios como un argumento para hg strip . Por ejemplo, para eliminar la última confirmación que acaba de realizar (después de usar los comandos que causaron que hg rollback informe que ya no hay ninguna transacción para revertir), puede eliminar la revisión de la tip . Cada vez que ejecute este comando, se eliminará otra revisión. Las acciones de hg strip deben considerarse irreversibles; los usuarios desconocidos deben hacer copias de seguridad de sus repositorios antes de usar.

$ hg strip tip

Por ejemplo, con la sintaxis de revsets , indico que quiero eliminar cualquier confirmación mía que tenga como resultado que se muestren cabezas adicionales cuando ejecuto hg heads . Si especifica una revisión particular en la siguiente expresión que no sea tip , se recortará todo en la rama actual que no sea un antepasado de su revisión elegida. Esto parece más cercano al comportamiento que quiero cuando git reset --hard HEAD el comando git reset --hard HEAD .

$ hg strip "branch(tip) and not(ancestors(tip)::tip)"


Si aún no se ha comprometido, y parece que no lo ha hecho, puede deshacer todo el trabajo de combinación con hg update --clean .

Sin embargo, en los nuevos mercurial hay un comando útil para volver a combinar un solo archivo: hg resolve path/to/file.ext . De la hg help resolve :

The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and

reinicie la combinación desde cero: "hg resolver archivo ..." (o "-a" para todos los archivos sin resolver)