Los bookmarks no son ramas, y ese es el punto
Parte 8 de 9.
Llamar “bookmarks” en lugar de “ramas” a los punteros con nombre de jj parecía
vocabulario innecesario al principio. No lo es. Una rama de Git avanza automáticamente
cada vez que haces commit mientras está en checkout: la referencia y tu línea de
trabajo actual son la misma cosa hasta que cambias explícitamente. Un bookmark de jj
está desacoplado de eso: puedes estar trabajando varios commits más allá del último
sitio al que apunta un bookmark, y simplemente se queda ahí hasta que lo mueves con
jj bookmark set o haciendo rebase del commit al que está adjunto.
Ese desacoplamiento es lo que hace que el ciclo real de publicación se sienta más ligero:
jj bookmark create feature-colors
jj git push --bookmark feature-colors
y, una vez que un PR se fusiona y el main del remoto se mueve,
jj git fetch
suele ser el paso entero de “ponerse al día”, porque una fusión normal o una fusión
con squash sigue siendo un fast-forward desde la punta antigua, y un bookmark con
seguimiento hace fast-forward al hacer fetch sin que se lo digan. Compara eso con
acordarte de git branch -f o git merge origin/main según el humor.
El detalle que más aprecié, porque elimina toda una categoría de errores de “¿me
olvidé de actualizar el puntero de la rama?”: hacer rebase de un commit al que apunta
un bookmark se lleva el bookmark consigo automáticamente. jj rebase -d main sobre un
commit de una feature mueve su bookmark con él en la misma operación. Y cuando el
objetivo del rebase ya contiene el mismo cambio (la situación exacta tras una fusión
con squash), jj se da cuenta de que el diff ya está presente y descarta el commit
ahora vacío en lugar de dejar detrás un commit no-op perdido, que es la única parte
del equivalente en Git para la que siempre se me olvida el flag (--skip-empty).
Nada de esto requirió abandonar el flujo de trabajo basado en PR que mi equipo ya usa. Es el mismo flujo de GitHub, el mismo proceso de revisión, el mismo botón de fusión. Solo la contabilidad local entre “tengo unos commits” y “el remoto los refleja” se volvió notablemente más ligera.