Bookmarks (ramas)

Por: Artiko
jujutsujjbookmarksramas

Bookmarks en lugar de branches

En jj, las “ramas” se llaman bookmarks. Son punteros con nombre a commits, similares a las branches de Git pero con una diferencia clave: no necesitas ramas para trabajar.

En Git, siempre estás “en una rama”. En jj, trabajas directamente con commits. Los bookmarks son opcionales y se usan principalmente para interactuar con remotos Git.

Ramas anónimas

Puedes crear una cadena de commits sin darle nombre:

jj new main
jj describe -m "primer cambio"
jj new
jj describe -m "segundo cambio"

Estos commits existen sin pertenecer a ningún bookmark. jj los mantiene visibles en el log sin problema.

Crear y mover bookmarks

# Crear bookmark en el working copy actual
jj bookmark create mi-feature

# Crear bookmark en un commit específico
jj bookmark create mi-feature -r sqpuoqvx

# Mover bookmark a otro commit
jj bookmark set mi-feature -r otrocommit

Listar bookmarks

# Todos los bookmarks
jj bookmark list

# Solo bookmarks que trackean un remoto
jj bookmark list --tracked

Eliminar bookmarks

jj bookmark delete mi-feature

Tracking de remotos

Cuando clonas un repo Git, jj crea bookmarks de tracking automáticamente:

jj bookmark list
# main: abc123 (tracked by origin)
# feature: def456 (tracked by origin)

Hacer tracking de un bookmark remoto

jj bookmark track mi-feature@origin

Dejar de trackear

jj bookmark untrack mi-feature@origin

Push y fetch de bookmarks

# Push del bookmark actual
jj git push

# Push de un bookmark específico
jj git push --bookmark mi-feature

# Push de todos los bookmarks
jj git push --all

# Fetch de cambios remotos
jj git fetch

Workflow típico con bookmarks

# 1. Empezar desde main actualizado
jj git fetch
jj new main

# 2. Trabajar en tu feature
echo "nuevo código" > feature.js
jj describe -m "feat: nueva funcionalidad"

# 3. Crear bookmark para push
jj bookmark create mi-feature

# 4. Push al remoto
jj git push --bookmark mi-feature

# 5. Más cambios (el bookmark se mueve automáticamente)
jj new
echo "más código" > otro.js
jj describe -m "feat: agregar otro módulo"
jj bookmark set mi-feature  # mover bookmark al commit actual
jj git push --bookmark mi-feature

Diferencias con Git branches

Gitjj
Siempre estás en un branchTrabajas con commits directamente
git checkout -b nombrejj bookmark create nombre (opcional)
Branch se mueve al hacer commitBookmark se mueve manualmente o con push
Necesitas branch para pushSolo necesitas bookmark para push