Editar el historial
En jj, reescribir el historial es trabajo diario, no una vía de escape arriesgada. Cuando cambias un commit, Wyrm hace rebase de todo lo que tiene encima por ti. Cada edición de las que siguen es una sola operación, así que deshacer la revierte.
Por defecto, jj trata tu trunk (como main@origin) y los tags como inmutables y se niega a reescribirlos. El interruptor 🛡 anula eso cuando de verdad quieres hacerlo.
La mayoría de los comandos están en el menú contextual (clic derecho) de un commit del log, en Operaciones de commit. Los menos habituales están en Más.
Dividir un commit
Sección titulada «Dividir un commit»Selecciona el commit y elige Dividir…. En Dividir commit, marca los archivos que deben ir al primer commit, o abre los hunks de un archivo y elige hunks sueltos. Haz clic en Dividir. El resto se queda en un segundo commit encima.
También puedes dividir directamente desde el diff: la cabecera de cada hunk tiene un botón Dividir.
- Squash al padre (
S): integra el commit seleccionado en su padre. - Squash en otro commit: selecciona el commit, haz clic derecho en el commit en el que quieres integrarlo y elige Squash de … en ….
- Varios commits a la vez: selecciona una serie de commits contiguos y elige Squash de N commits juntos.
- Squash con opciones… (en Más) puede conservar el commit vaciado o quedarse solo con la descripción del padre.
Absorber
Sección titulada «Absorber»¿Has arreglado en tu copia de trabajo algunas cosas que pertenecen a commits más antiguos? Selecciona @ y elige Absorber en ancestros (A). jj mueve cada línea modificada al commit que la tocó por última vez y deja en @ lo que no sabe dónde colocar.
Trabajar con hunks y líneas sueltas
Sección titulada «Trabajar con hunks y líneas sueltas»En el diff de cualquier commit, la cabecera de cada hunk tiene cuatro botones:
- Squash ↑: mueve el hunk al commit padre.
- Mover…: lo mueve a cualquier otro commit.
- Dividir: lo separa en un commit propio.
- Descartar: lo quita de este commit, de modo que ahí el archivo vuelve a la versión del padre.
Para actuar sobre varios hunks, márcalos (Space marca un hunk); con ⇧-clic eliges líneas sueltas. La barra sobre el diff muestra cuántos hunks y líneas hay seleccionados. Con una selección, ⇧S le hace squash y ⌫ la descarta. Descartar pregunta antes. Los archivos binarios, renombrados o con conflictos solo ofrecen acciones sobre el archivo entero.
El clic derecho sobre un hunk ofrece los mismos movimientos: Squash del hunk al padre, Descartar cambios del hunk, Mover hunk a….
Mover archivos enteros entre commits
Sección titulada «Mover archivos enteros entre commits»En el panel de revisión, selecciona uno o varios archivos y usa Squash en el padre, Mover a… o Restaurar archivos. Mover a… abre Mover cambios a…: introduce la Revisión de destino (un bookmark, un change ID o un revset) y haz clic en Mover.
También puedes arrastrar un archivo o un hunk sobre un commit del log y elegir Aplicar squash aquí.
Editar o eliminar un archivo en cualquier revisión
Sección titulada «Editar o eliminar un archivo en cualquier revisión»Haz clic derecho en un archivo entre los cambios de un commit:
- Editar en esta revisión… abre el archivo tal como está en ese commit. Guarda con
⌘S: Wyrm reescribe ese commit y hace rebase de sus descendientes sobre él. - Eliminar de esta revisión… quita el archivo solo de ese commit; los commits posteriores se rebasan.
El panel de archivos tiene las mismas dos acciones.
Reordenar, rebase y más
Sección titulada «Reordenar, rebase y más»- Reordenar (
R, con dos o más commits seleccionados): arrástralos al orden que quieras y haz clic en Aplicar reordenamiento. - Arrastrar y soltar: arrastra un commit sobre otro para Hacer rebase aquí, sobre la línea entre dos commits para Insertar aquí, o sobre un merge para añadirlo como padre.
- Rebase sobre otro commit: selecciona el commit, haz clic derecho en el destino y elige Rebase de … sobre ….
- Restaurar desde el padre, Duplicar, Revertir (backout) y Abandonar… están en el mismo menú contextual. Más añade Cambiar padres…, Simplificar padres, Restaurar desde… y las demás variantes.
Si una reescritura crea un conflicto, jj lo registra en el commit en lugar de detenerte. Consulta Resolución de conflictos.