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.