Working copy y cambios
El working copy es un commit
Este es el concepto más importante de jj. En Git, el working directory es un espacio “suelto” que debes convertir en commit explícitamente. En jj, tu working copy ya es un commit.
Cada vez que guardas un archivo, jj actualiza el commit del working copy automáticamente. No hay archivos “sin trackear” ni staging area.
Change IDs vs Commit IDs
jj tiene dos tipos de identificadores:
Change ID
- Identificador estable del cambio
- Sobrevive a rebases y enmiendas
- Formato corto:
sqpuoqvx - Se muestra en la primera columna de
jj log
Commit ID
- Hash del contenido (como en Git)
- Cambia si el commit se modifica
- Formato: hash SHA similar a Git
@ sqpuoqvx [email protected] 2026-02-26 abc123de
│ mi descripción
Aquí sqpuoqvx es el change ID (estable) y abc123de es el commit ID (variable).
Usa siempre el change ID para referirte a commits. Es más corto y no cambia al editar el historial.
Trabajar con el working copy
Ver qué hay en tu working copy
jj status
Descartar cambios del working copy
# Descartar todos los cambios
jj restore
# Descartar cambios de un archivo específico
jj restore archivo.txt
Restaurar un archivo desde otro commit
jj restore --from sqpuoqvx archivo.txt
El comando jj new
jj new es fundamental. Crea un nuevo commit vacío como hijo del actual y mueve el working copy ahí:
# Nuevo commit sobre el actual
jj new
# Nuevo commit sobre un commit específico
jj new sqpuoqvx
# Nuevo commit con dos padres (merge)
jj new padre1 padre2
Describir commits
# Describir el working copy
jj describe -m "mi mensaje"
# Describir otro commit
jj describe sqpuoqvx -m "nueva descripción"
# Abrir editor para descripción larga
jj describe
Snapshotting automático
jj toma “snapshots” del working copy antes de cada operación. Esto significa que:
- Nunca pierdes trabajo no guardado
jj undorestaura incluso cambios que no describiste- No necesitas
stash— tus cambios ya están en un commit
Ejemplo práctico
# Inicias trabajando
echo "función nueva" > feature.js
# jj ya registró esto en el working copy
# Describes lo que hiciste
jj describe -m "feat: agregar función nueva"
# Creas un nuevo commit para más trabajo
jj new
# Sigues trabajando...
echo "otra cosa" > utils.js
jj describe -m "feat: agregar utils"
En cualquier momento puedes ver todo con jj log — cada paso es un commit visible.