significado precio nike mercurial

precio - ¿Puedo squash commits en Mercurial?



mercurial significado (4)

Tengo un par de compromisos que realmente deberían ser solo uno. Si estuviera usando git, usaría:

git rebase -i <some-commit-before>

y luego aplastarlos.

¿Puedo hacer eso en mercurial? ¿Si es así, cómo?


Si está leyendo esta respuesta, puede olvidar todas las otras opciones mencionadas en esta respuesta y usar el comando de fold de la extensión evolucionar .

evolve es una extensión de mercurial que nos ayuda a tener una historia mutable segura, sin embargo es aún experimental. Puede usarlo al clonarlo desde su repo y agregarlo en su .hgrc de esta manera.

[extensions] evolve = ~/evolve/hgext/evolve.py

Suponiendo que haya clonado, desarrolle el repositorio en su directorio personal. Ahora eres bueno para ir. También puede buscar ayuda haciendo hg help fold .

Comando Fold

Le dices fold para squash / fold una cadena lineal de commit que no está rota. Lo que hace fold es que crea un nuevo conjunto de cambios que contiene cambios de todos los conjuntos de cambios y marca todos los commits como obsoletos. Puede tener una visión más profunda de esto en los docs .

Ahora supongamos que tiene el siguiente historial.

a -> b -> c -> d -> e -> f -> g

Quieres aplastar e , f y g . Tu puedes hacer

hg up g hg fold -r e

El resultado será

a -> b -> c -> d -> h

donde h es el conjunto de cambios que contiene cambios de los tres commits e , f y g .

También puede doblar conjuntos de cambios desde la mitad de la historia, es decir, no necesariamente tiene que elegir una cadena que incluya la punta. Supongamos que quiere doblar b , c y d . Tu puedes hacer

hg up d hg fold -r b hg evolve --all

Esto dará como resultado

a -> i -> j

donde i es el conjunto de cambios doblado de b , c , d y j es el mismo conjunto de cambios que h . Evolve la guía del usuario es una lectura obligada.


La extensión de Rebase funcionaba como un encanto. Para aplastar 2 commits:

$ hg rebase --dest .~2 --base . --collapse

El punto es un atajo para la revisión actual.

Es incluso más fácil cuando tienes algunos commits en una rama y quieres colapsarlos todos en uno:

$ hg rebase --dest {destination branch (e.g. master)} --base . --collapse

Cómo funciona esto:

(de http://mercurial-scm.org/wiki/RebaseExtension#Collapsing )


Mi favorito es hg strip --keep command. Y luego comprometo todos los cambios en una confirmación.

Es la forma más rápida y cómoda para mí, porque me gusta hacer pequeños commits durante mi trabajo diario;)

Nota 1: strip necesita una extensión mq incorporada para habilitarse.
Nota 2: Mi cliente favorito de Git / Mercurial (SmartGit / Hg) se agrega por defecto --keep parameter during strip . Y lo que es aún más conveniente: proporciona una opción llamada join commits :]