mercurial mercurial-queue

¿Cómo convierto un parche de colas de Mercurial a cambios locales solamente?



mercurial-queue (2)

Una alternativa discutiblemente más simple:

hg qfinish qtip hg strip -k tip

Es decir, termine el parche y luego elimine el compromiso resultante mientras conserva sus cambios (la opción -k para strip ).

Esta respuesta muestra cómo puede degradar un compromiso a un parche, pero ¿cómo puedo convertir un parche mq a cambios locales solamente?


Respuesta corta

Asegúrese de que se aplique el parche, luego:

hg qrefresh nothing hg qpop --keep-changes hg qdelete "Name of patch"

Respuesta larga

Primero, debe asegurarse de que el parche no rastree los cambios. Para hacer eso, usa

hg qrefresh nothing

nothing es solo un nombre de archivo aleatorio que no está en el repositorio. Usualmente uso hg qref 0 para abreviar. hg qrefresh acepta un patrón de archivo opcional. Si se proporciona, el parche hará un seguimiento de los cambios que coinciden con el patrón, y solo aquellos. Cuando nada coincide con el patrón de archivo, el parche no rastreará los cambios y, por lo tanto, solo habrá cambios locales.

Ahora tiene un parche inútil y tiene algunos cambios locales. Para limpiar, puedes hacer

hg qpop --keep-changes

para abrir el parche a pesar de que hay cambios locales. Finalmente, para eliminar el parche muerto, vacío y sin aplicar, puede usar

hg qrm "Name of patch"

No puede eliminar un parche aplicado, por lo que necesita el paso hg qpop --keep-changes .

(Nota: hg qrm y hg qremove son alias de hg qdelete .)

Si usa TortoiseHg

Con TortoiseHg, exportar el parche al portapapeles (Workbench> clic con el botón derecho en el parche> Exportar> Copiar parche), luego quitar la aplicación del parche y finalmente importar desde el portapapeles con el destino como "Directorio de trabajo" parece funcionar. Aquí hay algunas capturas de pantalla que demuestran este procedimiento: