Tengo un par de confirmaciones que deberían ser solo una. 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?
Sí, puede hacer esto usando mercurial sin ninguna extensión mediante la concatenación de conjuntos de cambios .
Alternativamente, si desea usar una extensión, puede usar:
Mi favorito es el
hg strip --keep
mando. Y luego realizo todos los cambios en una confirmación.Es la forma más rápida y cómoda para mí, porque me gusta hacer muchos pequeños compromisos durante mi trabajo diario;)
Nota 1:
strip
necesita una extensión incorporadamq
para estar habilitada.Nota 2: Mi cliente Git / Mercurial favorito (SmartGit / Hg) agrega un
--keep
parámetro predeterminado durantestrip
. Y lo que es aún más conveniente: proporciona una opción llamadajoin commits
:]fuente
hg strip --keep --rev [rev]
¿Dónderev
está el número de revisión de la primera confirmación que desea aplastar con la última--rev
es opcional, el comando completo eshg strip --keep [rev]
hg help strip
dahg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...
, y omitir la revisión me daabort: empty revision set
.hg strip
no es la mejor idea. No es exactamente seguro. Intentehg histedit
, tal vez incluso intente usar la extensión evolucionar.La extensión Rebase funcionó a las mil maravillas . Para aplastar 2 confirmaciones:
Dot es un atajo para la revisión actual.
Es incluso más fácil cuando tiene algunas confirmaciones en una rama y desea colapsarlas todas en una:
Como funciona esto:
(de http://mercurial-scm.org/wiki/RebaseExtension#Collapsing )
fuente
evolve
es una extensión de mercurial que nos ayuda a tener un historial mutable seguro, aunque todavía es experimental. Puede usarlo clonándolo desde su repositorio y agregándolo a su .hgrc de esta manera.Suponiendo que clonó el repositorio evolucionar en su directorio de inicio. Ahora estás listo para irte. También puede buscar ayuda en
hg help fold
.Doblar comando
Le dice
fold
a aplastar / doblar una cadena lineal de confirmaciones que no se rompa. Lo que hace fold es que crea un nuevo conjunto de cambios que contiene los cambios de todos los conjuntos de cambios y marca todas esas confirmaciones como obsoletas. Puede tener una visión más profunda de esto en docs .Ahora suponga que tiene el siguiente historial.
Usted quiere aplastar
e
,f
yg
. Tu puedes hacerEl resultado sera
donde
h
es el conjunto de cambios que contiene los cambios de las tres confirmacionese
,f
yg
.También puede plegar conjuntos de cambios desde la mitad del historial, es decir, no necesariamente tiene que elegir una cadena que incluya la punta. Supongamos que usted quiere doblar
b
,c
yd
. Tu puedes hacerEsto resultará en
donde
i
es el conjunto de cambios plegada deb
,c
,d
yj
es el mismo de cambios comoh
. La guía del usuario de Evolve es una lectura obligada.fuente
--keep
opción de rebase cubre esto (seguido de marcar las revisiones como secretas o usar una tira en ellas una vez que haya verificado el resultado). Incluso es posible mover revisiones entre otras revisiones con una secuencia de dos comandos de rebase.Con Mercurial 4.8 (noviembre de 2018, 9 años después), podría considerar el nuevo comando
hg absorb
(antes era una característica experimental ).Consulte " Absorción de cambios de compromiso en Mercurial 4.8 "
fuente
Creo que
chistedit
(integrado desde Mercurial 2.3) es el más cercano arebase -i
Mercurial puro (chistedit
es la versión interactiva dehistedit
). Una vez en histedit, elfold
comando se asigna a rebasesquash
y losroll
mapas de comando a rebasefixup
. Consulte los documentos histedit para obtener más información.He aquí un ejemplo sencillo. Suponga que tiene lo siguiente y desea mover todos los cambios de 1e21c4b1 a la revisión anterior y simplemente mantener el mensaje de la revisión anterior.
Puede ejecutar
hg chistedit -r b4a738a4
para editar el historial de nuevo a b4a738a4. En chistedit, luego el cursor hacia abajo hasta 1e21c4b1 y presionar
para indicar que desea lanzar esa revisión. Tenga en cuenta que el orden en histedit (de más antiguo a más nuevo) se invierte dehg log
(más nuevo a más antiguo).Después de elegir sus cambios, elige
c
confirmarlos. El resultado es el siguiente:@ bfa4a3be drees tip | Un compromiso de 788aa028 drees | Cosas más antiguas
Si es relativamente nuevo en ellos, entonces
histedit
puede ser una mejor opción quechistedit
porque proporciona las descripciones de los comandos en el archivo histedit como referencia. Solo se necesita un poco más de edición para configurar los comandos usando la edición de texto normal (al igual que el rebase normal).Tenga en cuenta que para usar
histedit
ochistedit
debe agregarhistedit
a sus extensiones en su ~ / .hgrc:Sugerí
chistedit
ya que está más cercarebase -i
y funciona en cualquier parte de la historia. Si realmente solo desea subsumir / modificar la revisión actual en la anterior, entonces @G. Lastrip
sugerencia de Demecki puede ser buena ya que lo que está sucediendo es claro. Está construido desde Mercuria 2.8. Para obtener los resultados equivalentes a los anteriores, puede hacer lo siguiente:Tenga en cuenta que
strip
, como histedit, debe estar habilitado en su ~ / .hgrc:fuente
Supongamos que desea aplastar (unir) 2 confirmaciones más recientes.
Encuentra un número de revisión
posible salida:
Rama de reinicio suave
Confirmar cambios de nuevo
Notas
strip
requiere que se habilite una extensión incorporada. Cree / edite el~/.hgrc
archivo de configuración con el siguiente contenido:fuente
Yo suelo:
fuente