significado nike meaning mercurial

nike - mercurial svn



¿Hay alguna manera de eliminar los compromisos locales en Mercurial? (8)

Como todos los demás están señalando, probablemente debas simplemente jalar y luego unir las cabezas, pero si realmente quieres deshacerte de tus compromisos sin ninguna de las herramientas de EditingHistory de EditingHistory , puedes simplemente hacer un hg clone -r tu repo para obtener todos menos esos cambios .

Esto no los elimina del repositorio original, pero crea un nuevo clon que no los tiene. Luego puede eliminar el repositorio que modificó (si lo desea).

Así que sigo cometiendo un error tonto en Mercurial. Muchas veces, empiezo a trabajar sin hacer un "hg pull" y una "hg update". Cuando intento forzar mis cambios, recibo un error.

¿Hay alguna forma de eliminar mis confirmaciones locales para evitar crear múltiples jefes, sucursales, etc.? Solo quiero eliminar mis confirmaciones locales, combinar mis cambios con la sugerencia y volver a confirmar. Suena simple, ¿verdad? Parece que no puedo encontrar una manera de eliminar fácilmente las confirmaciones locales, de modo que pueda fusionarme limpiamente con la sugerencia.

Nuevamente, solo estoy tratando de eliminar los compromisos locales realizados con "hg ci". No quiero modificar archivos, revertir, etc.


Habilite la extensión " tira " y escriba lo siguiente:

hg strip #changeset# --keep

Donde #changeset# es el hash para el conjunto de cambios que desea eliminar. Esto eliminará dicho conjunto de cambios, incluidos los conjuntos de cambios que descienden de él y dejará su directorio de trabajo intacto . Si también desea revertir los cambios de código comprometidos, elimine la opción --keep .

Para obtener más información, consulte la extensión de la tira .

Si obtienes el "comando desconocido '''' strip '''' es posible que necesites habilitarlo. Para hacerlo, busque el archivo .hgrc o Mercurial.ini y agregue lo siguiente:

[extensions] strip =

Tenga en cuenta que (como mencionó Juozas en su comentario) tener múltiples cabezas es un flujo de trabajo normal en Mercurial. No debes usar el comando de desnudar para luchar contra eso. En su lugar, debe combinar su cabeza con la cabeza entrante, resolver cualquier conflicto, probar y luego presionar.

El comando strip es útil cuando realmente desea deshacerse de los conjuntos de cambios que contaminan la rama. De hecho, si se encuentra en la situación de esta pregunta y desea eliminar por completo todos los conjuntos de cambios "borrador" de forma permanente, consulte la respuesta principal , que básicamente sugiere hacerlo:

hg strip ''roots(outgoing())''


Me encontré con este problema también. Hice 2 commit y quería revertir y eliminar ambas confirmaciones.

$ hg rollback

Pero la hg rollback solo retrocede hasta el último commit, no los 2 commit. En ese momento no me di cuenta de esto y cambié el código.

Cuando encontré que hg rollback acababa de deshacer un commit, encontré que podía usar hg strip #changeset# . Por lo tanto, utilicé hg log -l 10 para encontrar los últimos 10 confirmaciones y obtener el conjunto de cambios correcto que quería strip .

$ hg log -l 10 changeset: 2499:81a7a8f7a5cd branch: component_engine tag: tip user: myname<[email protected]> date: Fri Aug 14 12:22:02 2015 +0800 summary: get runs from sandbox changeset: 2498:9e3e1de76127 branch: component_engine user: other_user_name<[email protected]> date: Mon Aug 03 09:50:18 2015 +0800 summary: Set current destination to a copy incoming exchange ...... $ hg strip 2499 abort: local changes found

¿Qué es abort: local changes found significan abort: local changes found ? Significa que hg encontró cambios en el código que aún no se han confirmado. Por lo tanto, para resolver esto, debe hg diff guardar el código que ha cambiado y hg revert y hg strip #changeset# . Al igual que esto:

$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff $ hg revert file_you_have_changed $ hg strip #changeset#

Una vez que haya hecho lo anterior, puede patch el archivo diff y su código puede agregarse nuevamente a su proyecto.

$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff


Puede solucionar esto incluso más fácilmente con la extensión Rebase , simplemente use hg pull --rebase y sus compromisos se volverán a confirmar automáticamente a la revisión extraída, evitando el problema de bifurcación.


Respuesta moderna (solo relevante después de Mercurial 2.1):

Use Phases y marque las revisiones que no desea compartir como secretas (privadas). De esa manera cuando empujes no serán enviados.

En TortoiseHG puede hacer clic derecho en un compromiso para cambiar su fase.

También: También puede usar la extensión "rebase" para mover sus confirmaciones locales a la cabecera del repositorio compartido después de tirar.


Si está familiarizado con git, le complacerá utilizar histedit que funciona como git rebase -i .


Si está utilizando Hg Tortoise, active la extensión " tira " en:

  1. Archivo / Configuración / Extensiones /
  2. Tira de selección

Luego, seleccione la revisión inferior desde donde desea comenzar el trazado de líneas, haciendo right click el right click en ella y seleccionando:

  1. Modificar historia
  2. Tira

Al igual que esto:

En este ejemplo, se borrará de la revisión 19 a la última realizada (22).


hg strip es lo que estás buscando. Es similar al git reset de git reset si estás familiarizado con git.

Usa la consola:

  1. Necesitas saber el número de revisión. hg log -l 10 . Este comando muestra las últimas 10 confirmaciones. Encuentra el compromiso que estás buscando. Necesita un número de 4 dígitos del conjunto de cambios de línea de changeset: 5888:ba6205914681 de changeset: 5888:ba6205914681

  2. Entonces hg strip -r 5888 --keep . Esto elimina el registro de la confirmación pero mantiene todos los archivos modificados y, a continuación, puede volver a confirmarlos. (Si desea eliminar archivos para simplemente eliminar --keep hg strip -r 5888