¿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: