Digamos que tengo un repositorio Mercurial local y otro remoto. Ahora empiezo a trabajar en una función. Trabajo en él, y cuando creo que está hecho, confirmo el conjunto de cambios. Probándolo un poco más, descubrí que podría mejorar aún más esta función modificando algo en el código. Hago el cambio y me comprometo. 20 minutos después, encuentro que hay un error en esta nueva función, así que lo soluciono y también lo cometo.
Ahora tengo 3 conjuntos de cambios que realmente me gustaría enviar al repositorio remoto como un conjunto de cambios con el mensaje "Implementando la característica X", por ejemplo.
¿Cómo puedo hacer esto sin muchos problemas? Creo que podría hacerlo con parches, pero parece mucho trabajo.
mercurial
push
compression
changeset
Lucas
fuente
fuente
Respuestas:
¿Qué tal la extensión Collapse ?
fuente
hg rebase --collapse
. Consulte la wiki de hg sobre el comando rebase. Dado que esta pregunta es el tercer resultado de búsqueda general y el primero en stackoverflow, pensé que la información podría ser útil.hg rebase
con--collapse
dentro de una sola rama.La extensión histedit es exactamente lo que está buscando.
o
mostrará una lista de los conjuntos de cambios salientes. De la lista puedes
histedit le solicitará el nuevo mensaje de confirmación de los conjuntos de cambios plegados, que por defecto son los dos mensajes con "\ n *** \ n" separándolos.
También puede obtener resultados similares con la extensión mq, pero es mucho más difícil.
También puede usar la extensión de colapso para simplemente plegar, pero no proporciona una interfaz de usuario tan agradable y no proporciona una forma de editar el mensaje de confirmación resultante. La edición del mensaje de confirmación resultante también permite limpiar el mensaje final, que es algo que siempre termino utilizando.
fuente
Sí, puede hacerlo con parches: supongamos que su trabajo está en los conjuntos de cambios del 100 al 110, inclusive
Crea un parche:
% hg export -o mypatch 100:110 --git
Actualizar a 99:
% hg update 99
Aplique el parche con --no-commit (de lo contrario, recuperará todos sus conjuntos de cambios):
% hg import --no-commit mypatch
Confirme todos los cambios a la vez:
% hg commit
Ahora tiene dos cabezas (110 y 111) que deberían ser equivalentes en términos de archivos que producen en su directorio de trabajo, tal vez diferenciarlos por cordura antes de eliminar los anteriores:
% hg strip 100
Bien, ahora que lo he deletreado todo, parece largo, pero habiéndolo hecho un montón de veces, no lo encuentro demasiado complicado ...
fuente
hg strip --keep
y luego compromete todo en una sola confirmación?hg strip
colocará una copia de seguridad en el.hg/strip-backup/
directorio. Supongo que no es tan seguro,git reflog
pero todavía proporciona algún tipo de rescate.Si está utilizando TortoiseHg, puede seleccionar dos revisiones (use CTRL para seleccionar las que no sean posteriores), haga clic derecho y seleccione "Comprimir historial" .
Después de eso, obtendrá una nueva lista de cambios en un nuevo encabezado a partir del primer cambio que seleccionó antes, contendrá todas las listas de cambios descendientes entre las que seleccionó.
Simplemente puede eliminar las listas de cambios antiguas si ya no las necesita: use extensiones MQ para ello. Nuevamente, en TortoiseHg: haga clic derecho en la primera lista de cambios que necesita ser eliminada con todos sus descendientes, "Modificar historial -> Eliminar" .
fuente
Mi método preferido de usar mq para este plegado es usar TortoiseHg como se describe aquí . Sin embargo, se puede hacer fácilmente desde la línea de comando así:
(Puede haber una mejor manera de hacer el paso qfold, pero no soy consciente de ello, ya que normalmente uso TortoiseHg para esa operación).
Parece un poco complicado al principio, pero una vez que ha comenzado a usar mq, es bastante sencillo y natural, además, ¡puede hacer todo tipo de cosas con mq que pueden ser bastante útiles!
fuente
hg collapse
yhg histedit
son las mejores formas. O, mejor dicho, serían las mejores formas, si funcionaran de manera confiable ... Mehistedit
colgué con un volcado de pila en tres minutos.Collapse
no es mucho mejor.Pensé que podría compartir otros dos BKM:
hg rebase --collapse
Esta extensión se distribuye con Mercurial. Todavía no he tenido problemas con eso. Es posible que tenga que jugar algunos juegos para evitar las
hg rebase
limitaciones; básicamente, no le gusta rebasar a un ancestro en la misma rama, con nombre o por defecto, aunque lo permite si se cambia entre ramas (con nombre).Mueva el repositorio (
foo/.hg
) al directorio de trabajo (bar
) y sus archivos. No de la otra manera.Algunas personas han hablado de crear dos árboles de clonación y copiar archivos entre ellos. O parchear entre ellos. En cambio, es más fácil mover los
.hg
directorios.Esto funciona siempre que los verdaderos repositorios, los
.hg
árboles, sean independientes del directorio de trabajo y sus archivos.Si no son independientes ...
fuente
histedit
es una muy buena opción para esta tarea. Todavía no confío en él, ya que hago un git rebase -i, pero no falla ... al menos las versiones más nuevas lo dejarán en una rama temporal si algo sale terriblemente mal, por lo que la única vez que se eliminarán los conjuntos de cambios es después de que se confirme la nueva rama.Nunca he usado Mercurial, pero esto se parece mucho a lo que Martin Fowler estaba hablando en su blog no hace mucho:
http://martinfowler.com/bliki/MercurialSquashCommit.html
fuente
¿Por qué no simplemente
hg strip --keep
mandar?Entonces puede confirmar todos los cambios como una confirmación.
fuente
HistEdit hará lo que quieras, pero probablemente sea excesivo. Si lo único que necesita es plegar algunos conjuntos de cambios, Collapse Extension hará el trabajo.
fuente
Suponga que tiene dos confirmaciones
THIS
y no publicadasTHAT
en Mercurial y le gusta que se unan en una única confirmación en elTHIS
punto ::Compruebe que sus confirmaciones no estén publicadas:
Actualización para
LAST
confirmar:y la importación se confirma hasta
THIS
en MQ:Desaplique todos los parches y aplique solo primero
THIS
:Únete con
THAT
::NOTA Para encontrar el nombre,
THATNAME
use:Aplicar todos los parches y moverlos al historial del repositorio:
La publicación de mi blog sobre el tema es Unir dos confirmaciones en Mercurial .
fuente
Sí,
strip --keep
funciona para la pregunta del autor. Pero era ligeramente diferente a los demás, por ejemplo, si tiene la versión 1 a 30 pero solo quiere colapsar la versión 12-15. Otras soluciones funcionan pero nostrip --keep
.fuente