Bookmarks (ramas)
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
| Git | jj |
|---|---|
| Siempre estás en un branch | Trabajas con commits directamente |
git checkout -b nombre | jj bookmark create nombre (opcional) |
| Branch se mueve al hacer commit | Bookmark se mueve manualmente o con push |
| Necesitas branch para push | Solo necesitas bookmark para push |