Working copy y cambios

Por: Artiko
jujutsujjworking-copycambios

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

Commit ID

@  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:

  1. Nunca pierdes trabajo no guardado
  2. jj undo restaura incluso cambios que no describiste
  3. 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.