<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juju-chu! Blog (es)</title>
    <description>The latest articles on DEV Community by Juju-chu! Blog (es) (jujuchu-es).</description>
    <link>https://dev.to/jujuchu-es</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14955%2F8a03f3c5-f775-478a-b164-4ec5b4ba8f2a.png</url>
      <title>DEV Community: Juju-chu! Blog (es)</title>
      <link>https://dev.to/jujuchu-es</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jujuchu-es"/>
    <language>en</language>
    <item>
      <title>¿Jujutsu funciona con GitHub? ¿De dónde viene el nombre? 7 preguntas y respuestas</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/jujuchu-es/jujutsu-funciona-con-github-de-donde-viene-el-nombre-7-preguntas-y-respuestas-2a3p</link>
      <guid>https://dev.to/jujuchu-es/jujutsu-funciona-con-github-de-donde-viene-el-nombre-7-preguntas-y-respuestas-2a3p</guid>
      <description>&lt;h2&gt;
  
  
  Q1. ¿Puedo usar Jujutsu con mis repositorios de Git existentes?
&lt;/h2&gt;

&lt;p&gt;Sí. Jujutsu es altamente compatible con Git, y basta con ejecutar &lt;code&gt;jj git init&lt;/code&gt; dentro de un repositorio de Git existente para empezar a usarlo. No pierdes nada por probarlo y no tienes que dejar Git.&lt;/p&gt;

&lt;p&gt;La capa de almacenamiento de Jujutsu es modular, y Git es el backend por defecto&lt;sup&gt;1&lt;/sup&gt;. El backend de Git guarda los commits como objetos de Git normales, así que el historial que creas con Jujutsu también se puede consultar con las herramientas de Git.&lt;/p&gt;

&lt;p&gt;Un repositorio en el que Jujutsu y Git conviven se llama &lt;strong&gt;colocated&lt;/strong&gt;. Antes tenías que pasarle la opción &lt;code&gt;--colocate&lt;/code&gt; a &lt;code&gt;jj git init&lt;/code&gt;, o a &lt;code&gt;jj git clone&lt;/code&gt; al copiar un repositorio remoto, para configurarlo así. Desde la &lt;a href="https://docs.jj-vcs.dev/latest/changelog/#0340-2025-10-01" rel="noopener noreferrer"&gt;v0.34.0&lt;/a&gt;, publicada en octubre de 2025, colocated es la opción por defecto. Todavía vas a ver &lt;code&gt;--colocate&lt;/code&gt; en artículos viejos, pero hoy puedes omitirla sin problema.&lt;/p&gt;

&lt;p&gt;En un repositorio colocated, hay un directorio &lt;code&gt;.jj/&lt;/code&gt; junto a &lt;code&gt;.git/&lt;/code&gt; en la raíz. El &lt;code&gt;.gitignore&lt;/code&gt; que está dentro de &lt;code&gt;.jj/&lt;/code&gt; contiene &lt;code&gt;/*&lt;/code&gt;, así que agregar Jujutsu no toca el &lt;code&gt;.gitignore&lt;/code&gt; de la raíz. Como mencioné antes, el historial de commits de Git se sigue actualizando mientras usas Jujutsu, y puedes hacer push a GitHub o a cualquier otro remoto como siempre. También soporta commits firmados, así que funciona en repositorios que los exigen. En otras palabras, si quieres, puedes ser la única persona que usa Jujutsu en un equipo que trabaja con Git.&lt;/p&gt;

&lt;p&gt;Los comandos de Git también siguen funcionando en un repositorio colocated. Y si decides que Jujutsu no es para ti, puedes volver a Git borrando el directorio &lt;code&gt;.jj/&lt;/code&gt;. Jujutsu deja tu configuración de Git tal como está, lo que hace que probarlo no tenga prácticamente ningún costo ni riesgo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Q2. ¿Qué cosas puede hacer Git que Jujutsu todavía no?
&lt;/h2&gt;

&lt;p&gt;Pese a toda su compatibilidad con Git, Jujutsu todavía no soporta algunas funciones de Git, ni siquiera en la v0.46.0, la versión más reciente a octubre de 2026. Estas tres son las que más problemas suelen causar en proyectos reales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Submódulos&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LFS (Large File Storage)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks de Git o un equivalente directo&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La más grave es probablemente la falta de soporte para &lt;strong&gt;submódulos&lt;/strong&gt;. Los submódulos de Git te permiten incrustar otro repositorio Git independiente como un subdirectorio, normalmente para compartir código entre proyectos.&lt;/p&gt;

&lt;p&gt;Que no tengan soporte no significa que vayas a perder el contenido de tus submódulos. El verdadero problema es que no se actualizan automáticamente cuando te mueves por el historial. Con &lt;code&gt;jj edit&lt;/code&gt; puedes saltar a cualquier punto del historial como en una máquina del tiempo y ver o editar los archivos ahí, pero los directorios de los submódulos se quedan como estaban. Tienes que ejecutar &lt;code&gt;git submodule update --recursive&lt;/code&gt; manualmente cada vez.&lt;/p&gt;

&lt;p&gt;Jujutsu también ignora los cambios que haces dentro de un submódulo, así que para registrarlos en el historial tienes que ejecutar &lt;code&gt;git add&lt;/code&gt; y &lt;code&gt;git commit&lt;/code&gt; tú mismo. Puedes trabajar en un repositorio con submódulos, pero tienes que entender las limitaciones y encargarte a mano de las operaciones que no están soportadas.&lt;/p&gt;

&lt;p&gt;Del lado del desarrollo, los submódulos no encajan bien con el modelo de datos de Jujutsu, y soportarlos requeriría grandes cambios de diseño, que es una de las principales razones por las que el soporte se ha retrasado. Está en la hoja de ruta, pero buena parte de la documentación de diseño sigue sin terminar y no hay un plazo de implementación a la vista&lt;sup&gt;2&lt;/sup&gt;. Hoy en día, los equipos que necesitan compartir código suelen elegir un monorepo o paquetes privados en algo como &lt;a href="https://github.com/features/packages" rel="noopener noreferrer"&gt;GitHub Packages&lt;/a&gt; en lugar de submódulos. Si te toca tomar esa decisión, vale la pena considerar esas opciones para los proyectos nuevos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://git-lfs.com/" rel="noopener noreferrer"&gt;Git LFS&lt;/a&gt;&lt;/strong&gt; es una extensión de Git para video, audio, binarios grandes y otros archivos pesados. Guarda los datos grandes fuera del repositorio y mantiene en Git solo punteros a ellos. En GitHub, Git LFS es actualmente la única forma de gestionar en un repositorio archivos de más de 100 MB&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Se usa mucho en áreas como el desarrollo de videojuegos, y tampoco está soportado. Se está trabajando en ello, con varios PRs ya abiertos&lt;sup&gt;4&lt;/sup&gt;, pero quedan algunas cuestiones de diseño sin resolver, incluidas algunas que afectan a otras funciones. Todavía no hay un plazo claro para su lanzamiento.&lt;/p&gt;

&lt;p&gt;Por último, los &lt;strong&gt;hooks de Git&lt;/strong&gt;. Los hooks ejecutan tus propios scripts en respuesta a acciones específicas de Git, y muchos más equipos dependen de ellos que de las otras dos funciones. Los usos típicos son correr formateadores y linters antes de un commit, o tests y auditorías de seguridad antes de un push. &lt;a href="https://typicode.github.io/husky/" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; con &lt;a href="https://github.com/lint-staged/lint-staged" rel="noopener noreferrer"&gt;lint-staged&lt;/a&gt;, y &lt;a href="https://lefthook.dev/" rel="noopener noreferrer"&gt;Lefthook&lt;/a&gt;, son las herramientas populares para esto.&lt;/p&gt;

&lt;p&gt;Los comandos de Jujutsu nunca disparan los hooks de Git. &lt;code&gt;jj git push&lt;/code&gt;, por ejemplo, llama a &lt;code&gt;git push&lt;/code&gt; internamente, pero le pasa &lt;code&gt;--no-verify&lt;/code&gt; para saltarse los hooks a propósito&lt;sup&gt;5&lt;/sup&gt;. Oficialmente, no hay forma de disparar los hooks de Git en el momento que elijas, ni tampoco un mecanismo de hooks propio de Jujutsu.&lt;/p&gt;

&lt;p&gt;La razón es que los hooks no encajan con el diseño central ni con el modelo de datos de Jujutsu. Destacan un par de factores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jujutsu hace commit de tus cambios en los archivos automáticamente mientras trabajas, así que no hay un paso explícito de commit antes del cual puedan correr los hooks.&lt;/li&gt;
&lt;li&gt;Jujutsu reescribe código sin pasar por tu directorio de trabajo, por ejemplo, al hacer squash o cuando la edición de un commit anterior provoca un rebase automático de sus descendientes. Que las pruebas pasen en el commit original no garantiza que sigan pasando después.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aunque no cubren todo lo que hacen los hooks de Git, Jujutsu sí ofrece algunas herramientas oficiales que encajan con su modelo. Con &lt;code&gt;jj fix&lt;/code&gt;, registras formateadores en tu configuración y, al ejecutarlo, recorre hacia atrás tu historial mutable y formatea los archivos que cambiaron en cada commit. &lt;code&gt;jj run&lt;/code&gt; ejecuta un comando externo sobre un solo commit o sobre un rango de commits. Puedes usarlo para correr builds o tests a lo largo de tu historial, y como incorpora a los commits correspondientes los cambios que el comando realiza en los archivos, también sirve para linters con corrección automática u otras herramientas que arreglan código.&lt;/p&gt;

&lt;p&gt;¿Y si tu equipo tiene una configuración de hooks bien armada, pensada para Git, y quieres ser la única persona que usa Jujutsu? Hay varios enfoques según la situación, y el tema daría fácilmente para uno o dos artículos, así que aquí lo voy a dejar de lado. Si te interesa, mi libro &lt;a href="https://juju-chu.com/es" rel="noopener noreferrer"&gt;&lt;em&gt;Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;&lt;/a&gt; lo trata en la sección 4-3, «Tácticas alternativas para los Git hooks».&lt;/p&gt;

&lt;h2&gt;
  
  
  Q3. ¿Jujutsu funciona con GitHub?
&lt;/h2&gt;

&lt;p&gt;Sí. Como Jujutsu usa Git como backend, funciona sin problemas tanto si tu remoto está en GitHub como en GitLab o Bitbucket. El detalle es que Jujutsu comparte el trabajo mediante un concepto distinto llamado &lt;strong&gt;&lt;a href="https://www.jj-vcs.dev/latest/bookmarks/" rel="noopener noreferrer"&gt;bookmark&lt;/a&gt;&lt;/strong&gt; en lugar de una rama, y acostumbrarse a eso puede ser el verdadero obstáculo.&lt;/p&gt;

&lt;p&gt;Jujutsu no tiene nada que corresponda a las ramas con nombre de Git. Normalmente trabajas en ramas anónimas y, cuando llega el momento de compartir, pones un bookmark en el commit que quieras. Cuando haces push de un commit con bookmark a un remoto, Git lo ve como una rama. Lo confuso es que GitHub lo trata como una rama aunque es un concepto distinto que se comporta de otra manera. A quienes recién empiezan suelen sorprenderles estos puntos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un bookmark no se mueve automáticamente a tu commit más reciente; tienes que moverlo tú mismo.&lt;/li&gt;
&lt;li&gt;Un mecanismo llamado tracking mantiene sincronizada la posición de un bookmark (y su eliminación) entre el entorno local y el remoto.&lt;/li&gt;
&lt;li&gt;El tracking es prácticamente imprescindible, así que los nombres de los bookmarks locales y remotos tienen que coincidir.&lt;/li&gt;
&lt;li&gt;También puedes crear un bookmark sobre la marcha al hacer push con la opción &lt;code&gt;-c/--change&lt;/code&gt; o &lt;code&gt;--named&lt;/code&gt;, aunque todavía no exista ninguno.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por qué Jujutsu tiene bookmarks en lugar de ramas, y qué ganas al compartir el trabajo con ellos, lo explico en detalle en mi artículo anterior, &lt;a href="https://juju-chu.com/es/blog/rethinking-branch-with-jj" rel="noopener noreferrer"&gt;«Jujutsu no tiene un paso para “crear una rama”, y así por fin entendí las ramas de Git»&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hay una diferencia de comportamiento con Git después de hacer push: si reescribes commits que ya subiste y vuelves a hacer push, se convierte automáticamente en un force push. Jujutsu siempre hace push de una forma parecida a &lt;code&gt;--force-with-lease&lt;/code&gt;, y a nivel local estás protegido contra reescrituras accidentales según si cada commit es mutable o inmutable. Sin embargo, por defecto, los commits que ya subiste fuera de trunk siguen siendo mutables, así que puedes reescribirlos, y al hacer push del resultado terminas haciendo un force push.&lt;/p&gt;

&lt;p&gt;Esto puede chocar con la política de los equipos que desarrollan en feature branches compartidas. En ese caso, cambia qué commits se consideran inmutables con una configuración como esta&lt;sup&gt;6&lt;/sup&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[revset-aliases]&lt;/span&gt;
&lt;span class="err"&gt;'immutable_heads()'&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'builtin_immutable_heads()&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="err"&gt;remote_bookmarks("feature/*",&lt;/span&gt; &lt;span class="err"&gt;"origin")'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Fuera de eso, abrir, aprobar y hacer merge de PRs, y el CI/CD con GitHub Actions y similares, funcionan casi exactamente igual con Jujutsu. Prácticamente la única diferencia es que, cuando borras la rama remota en GitHub después de hacer merge de un PR, el siguiente &lt;code&gt;jj git fetch&lt;/code&gt; también borra el bookmark local vinculado.&lt;/p&gt;
&lt;h2&gt;
  
  
  Q4. En resumen, ¿qué ventajas ofrece Jujutsu frente a Git?
&lt;/h2&gt;

&lt;p&gt;Comparado con Git, esto es lo que ganas al cambiarte a Jujutsu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No hay índice (staging area).&lt;/strong&gt; No existe un paso como &lt;code&gt;git add&lt;/code&gt; que tengas que ejecutar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Los commits se hacen automáticamente.&lt;/strong&gt; Cada vez que ejecutas un comando &lt;code&gt;jj&lt;/code&gt; y hay archivos que cambiaron desde el último commit, Jujutsu toma una nueva instantánea y actualiza el commit.&lt;/li&gt;
&lt;li&gt;Gracias a esas dos cosas, &lt;strong&gt;la copia de trabajo (lo que Git llama working tree) se trata como un commit en sí misma&lt;/strong&gt;. Puedes moverte por el historial como en una máquina del tiempo sin preocuparte por cambios pendientes de commit ni por mantener el índice consistente, como en Git.&lt;/li&gt;
&lt;li&gt;Cuando reescribes cualquier commit, &lt;strong&gt;se hace rebase automático de sus descendientes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Por más conflictos que surjan en un rebase, este termina normalmente sin forzarte a un modo interactivo y deja los conflictos en su lugar. Como &lt;strong&gt;los estados con conflictos quedan registrados en el historial&lt;/strong&gt; , rehacer una resolución o dejársela a una herramienta es fácil.&lt;/li&gt;
&lt;li&gt;Excepto por las operaciones que afectan al remoto, &lt;strong&gt;&lt;code&gt;jj undo&lt;/code&gt; puede deshacer casi cualquier cambio&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cada comando &lt;code&gt;jj&lt;/code&gt; que modifica el repositorio, y cada instantánea automática, &lt;strong&gt;se anota en el registro de operaciones (operation log)&lt;/strong&gt;. Más adelante puedes restaurar el repositorio a un estado anterior o revertir una operación específica.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No hace falta crear una rama ni ponerle nombre&lt;/strong&gt; solo para experimentar. Empieza con &lt;code&gt;jj new&lt;/code&gt; y, si no te gusta cómo va, descártalo con &lt;code&gt;jj abandon&lt;/code&gt; y vuelve a intentarlo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Los comandos son directos y fáciles de recordar.&lt;/strong&gt; Hacer squash, por ejemplo, es &lt;code&gt;jj squash --from A --into B&lt;/code&gt;. Las opciones que indican sobre qué operar y dónde ponerlo, como &lt;code&gt;-f/--from&lt;/code&gt;, &lt;code&gt;-t/--into&lt;/code&gt;, &lt;code&gt;-o/--onto&lt;/code&gt;, &lt;code&gt;-A/--insert-after&lt;/code&gt; y &lt;code&gt;-B/--insert-before&lt;/code&gt;, funcionan de forma consistente en los comandos relacionados.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Q5. ¿Es muy pronunciada la curva de aprendizaje?
&lt;/h2&gt;

&lt;p&gt;No necesitas muchos comandos para empezar. Con solo estos, deberías poder manejar todo el flujo de trabajo básico:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lo que quieres hacer&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ver el estado&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj st&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ver el log&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj log&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ver el diff&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj diff&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actualizar el mensaje del commit&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj desc -m '...'&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empezar el siguiente trabajo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj new&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deshacer la última operación&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj undo&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poner un bookmark&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj bookmark set &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traer cambios del remoto&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj git fetch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hacer push al remoto&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jj git push -b &amp;lt;bookmark&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Con solo esto ya aprovechas los commits automáticos y el undo, y si eso te parece valioso, ya superaste el primer obstáculo. El problema viene después. Mientras más experiencia tenga alguien con Git, más probable es que use Jujutsu con su modelo mental de Git intacto, consultando una tabla de equivalencias de comandos&lt;sup&gt;7&lt;/sup&gt;. Así, solo estás traduciendo operaciones de Git una por una: te pierdes buena parte de lo que hace útil a Jujutsu y encima sumas la tarea de traducir comandos.&lt;/p&gt;

&lt;p&gt;Jujutsu se diseñó para resolver lo que hace difícil usar Git. Se mantiene compatible con Git, pero replantea el modelo mental desde cero. Para sacarle el máximo provecho, tienes que seguir el consejo de Yoda: «Debes desaprender lo que has aprendido».&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzwopz9jlf8gj8130bj1w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzwopz9jlf8gj8130bj1w.jpg" alt="Una cita de Yoda" width="799" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por eso la siguiente etapa es la difícil. La dificultad no viene de que Jujutsu sea complicado. Viene de tener que replantear hábitos de control de versiones que construiste durante años con Git, y soltar conceptos que siempre diste por sentados. De vez en cuando veo gente que nunca se da cuenta de esto, sigue usando su flujo de trabajo de Git sobre Jujutsu, no siente ningún beneficio y vuelve a Git.&lt;/p&gt;

&lt;p&gt;En mi experiencia, enfocarse en estas tres cosas es la forma más rápida de desarrollar un modelo mental de Jujutsu:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Entiende qué es un change, la unidad habitual del historial en Jujutsu&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Piensa en un change como un contenedor con un nombre y un ID que nunca cambia, y en los commits (también llamados revisiones) como versiones sucesivas de un documento guardadas dentro de él. No es técnicamente preciso, pero es una imagen fácil para quienes empiezan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Olvídate de la idea de que solo haces commit cuando terminaste tu trabajo&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;En Jujutsu, cada vez que cambias el código o la descripción (más o menos, el mensaje del commit), es como si &lt;code&gt;git commit --amend --no-edit&lt;/code&gt; se ejecutara al instante y de forma automática. Los changes están sin terminar por defecto y, cuando llegas a un buen punto para parar, simplemente pasas a otro change&lt;/li&gt;
&lt;li&gt;No uses &lt;code&gt;jj commit&lt;/code&gt;, que ejecuta &lt;code&gt;jj desc&lt;/code&gt; y luego &lt;code&gt;jj new&lt;/code&gt; en un solo paso y existe para soportar flujos de trabajo al estilo de Git&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acostúmbrate a no tener una «rama actual» mientras trabajas&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Apégate a un solo flujo: trabaja en una rama anónima y pon un bookmark solo cuando quieras compartir&lt;/li&gt;
&lt;li&gt;Desarrolla el hábito de ubicarte en el grafo que dibuja &lt;code&gt;jj log&lt;/code&gt;, en lugar de guiarte por el nombre de una rama&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una vez que sueltas tu flujo de trabajo de Git y sigues trabajando a la manera de Jujutsu, la lógica detrás de su diseño empieza a encajar. Para entonces, usar Jujutsu se sentirá completamente natural y no vas a querer trabajar sin él.&lt;/p&gt;
&lt;h2&gt;
  
  
  Q6. Jujutsu todavía no está en la 1.0. ¿Es seguro usarlo en el trabajo?
&lt;/h2&gt;

&lt;p&gt;La respuesta corta: si los problemas de la Q2 no te afectan, en la práctica casi no hay nada que te lo impida. Eso sí, la CLI y la configuración van a seguir cambiando, así que la verdadera pregunta al decidir adoptarlo es si puedes vivir con eso.&lt;/p&gt;

&lt;p&gt;El &lt;a href="https://github.com/jj-vcs/jj/blob/main/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt; del repositorio oficial en GitHub dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Jujutsu is an &lt;strong&gt;experimental version control system&lt;/strong&gt;. While Git compatibility is stable, and most developers use it daily for all their needs, there may still be work-in-progress features, suboptimal UX, and workflow gaps that make it unusable for your particular use.&lt;br&gt;&lt;br&gt;
(Jujutsu es un &lt;strong&gt;sistema de control de versiones experimental&lt;/strong&gt;. Aunque la compatibilidad con Git es estable y la mayoría de los desarrolladores lo usan a diario para todo lo que necesitan, todavía puede haber funciones en desarrollo, una UX mejorable y huecos en los flujos de trabajo que lo vuelvan inutilizable para tu caso particular).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;También dice que los flujos de trabajo pueden cambiar y que podría haber cambios incompatibles en el formato de los datos en disco antes de la 1.0, y agrega que el proyecto intentará ofrecer actualizaciones transparentes cuando el formato cambie.&lt;/p&gt;

&lt;p&gt;Puede sonar un poco preocupante, pero últimamente no ha habido grandes cambios incompatibles. La mayoría han sido eliminaciones de configuraciones y opciones de comandos obsoletas, o cambios en los requisitos del sistema. La &lt;a href="https://www.jj-vcs.dev/latest/changelog/#0380-2026-02-04" rel="noopener noreferrer"&gt;v0.38.0&lt;/a&gt;, publicada en febrero de 2026, cambió dónde se guardan los archivos de configuración de cada repositorio, pero fue por razones de seguridad, un paso necesario para proteger a los usuarios de ataques maliciosos.&lt;/p&gt;

&lt;p&gt;Martin von Zweigbergk, ex ingeniero de Google, empezó Jujutsu como proyecto personal a fines de 2019, y la primera versión en GitHub, la v0.3.0, salió en marzo de 2022. Eso fue hace cuatro años y medio. Desde la v0.9.0, en septiembre de 2023, sale una nueva versión casi todos los meses. Puede que todavía no sea 1.0, pero tiene una trayectoria sólida.&lt;/p&gt;

&lt;p&gt;A octubre de 2026, el repositorio oficial en GitHub tiene unas 32 000 estrellas. El proyecto tiene nueve maintainers, y cada release da crédito a unos 30 colaboradores. Ingenieros de varias empresas, Google entre ellas, contribuyen de forma continua. La documentación oficial enumera las empresas que financian el desarrollo de Jujutsu y los empleados que participan en él&lt;sup&gt;8&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;¿Y la adopción en el mundo real? Mencioné que el creador venía de Google. Según él, unas 900 personas dentro de Google ya usaban Jujutsu en septiembre de 2025&lt;sup&gt;9&lt;/sup&gt;. En julio de 2026 pasó a ser CTO de &lt;a href="https://www.ersc.io/" rel="noopener noreferrer"&gt;ERSC&lt;/a&gt;, una empresa que ofrece una plataforma de hosting cuyo almacenamiento está diseñado en torno al modelo de Jujutsu y que planea soportar en el futuro un protocolo nativo para clientes de Jujutsu. Que haya empresas que basan su negocio en Jujutsu es una buena señal de su confiabilidad.&lt;/p&gt;

&lt;p&gt;Además, los &lt;a href="https://docs.github.com/es/pull-requests/how-tos/stacked-pull-requests" rel="noopener noreferrer"&gt;stacked pull requests de GitHub&lt;/a&gt;, que dividen un PR en una cadena de PRs pequeños y dependientes, pasaron hace poco a disponibilidad general, y su documentación incluye una página que explica un flujo de trabajo con Jujutsu&lt;sup&gt;10&lt;/sup&gt;. Es razonable leer esto como una señal de que GitHub ve a Jujutsu como un cliente compatible, con demasiados usuarios como para ignorarlo, y al que vale la pena dar soporte.&lt;/p&gt;

&lt;p&gt;No creo que la falta de una 1.0 se deba a dudas sobre su calidad o su confiabilidad. Más bien, sospecho que los desarrolladores quieren conservar la libertad de cambiar su diseño mientras sigue evolucionando. Muchos desarrolladores ya lo usan todos los días, y hay empresas que siguen respaldando su desarrollo. Como mínimo, no haber llegado a la 1.0 no es por sí solo un motivo para evitar usarlo en el trabajo.&lt;/p&gt;
&lt;h2&gt;
  
  
  Q7. ¿Por qué se llama «Jujutsu»?
&lt;/h2&gt;

&lt;p&gt;Mucha gente da por hecho que el nombre viene del anime &lt;em&gt;Jujutsu Kaisen&lt;/em&gt;. En Japón, hasta se burlan de él en redes sociales por sonar un poco sobrado, como nombre de anime que quiere quedar intenso. Pero Jujutsu no tiene nada que ver con &lt;em&gt;Jujutsu Kaisen&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Entonces, ¿de dónde viene el nombre? El &lt;a href="https://github.com/jj-vcs/jj/blob/main/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt; oficial en GitHub sugiere que primero vino el nombre del comando, &lt;code&gt;jj&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The command-line tool is called jj for now because it’s easy to type and easy to replace (rare in English). The project is called “Jujutsu” because it matches “jj”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Con el índice derecho apoyado en la J de la fila guía, son solo dos toques, así que de verdad es fácil de escribir. El README da a entender que Jujutsu se eligió desde el principio como un nombre que encajaba con jj, pero en realidad el proyecto tuvo otro nombre al comienzo. En crates.io, el registro oficial de paquetes de Rust, hay un VCS llamado &lt;a href="https://crates.io/crates/jujube" rel="noopener noreferrer"&gt;Jujube&lt;/a&gt;. Su autor es Martin von Zweigbergk, y tiene dos versiones, 0.1.0 y 0.1.1, publicadas en enero de 2021. Así es: es el predecesor de Jujutsu. Esto es lo que dice su página sobre el nombre:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The command-line tool is called jj for now because it’s easy to type and easy to replace (rare in English). The project is called “Jujube” (a fruit) because that’s the first word I could think of that matched “jj”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En inglés, &lt;em&gt;jujube&lt;/em&gt; es una fruta poco conocida por acá: el dátil chino (azufaifa). Una vez más, el nombre se eligió simplemente porque coincidía con jj. Apenas cuatro meses después, el nombre cambió. El &lt;a href="https://github.com/jj-vcs/jj/commit/d42e6c77b26bd6f47a59ad18158a79e6bddb30d1" rel="noopener noreferrer"&gt;mensaje del commit&lt;/a&gt; de ese cambio de nombre sigue ahí:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;project: rename project from Jujube to Jujutsu “Jujutsu” is probably much more familiar and relatable to most people. Also, I’m still not sure how “jujube” is supposed to be pronounced :P&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Al parecer, el autor no le tenía un apego especial a Jujube, y se cambió a Jujutsu porque era un nombre más conocido y cercano para la mayoría. Cuando más tarde alguien le preguntó de dónde venía el nombre&lt;sup&gt;11&lt;/sup&gt;, señaló el &lt;a href="https://en.wikipedia.org/wiki/Jujutsu" rel="noopener noreferrer"&gt;artículo de Wikipedia sobre el jujutsu&lt;/a&gt;, así que se refiere al arte marcial japonés. En inglés, el arte tradicional japonés suele escribirse «jujutsu», mientras que «jiu-jitsu» es la grafía que la mayoría conoce por el jiu-jitsu brasileño. La Wikipedia en inglés tiene un &lt;a href="https://en.wikipedia.org/wiki/Brazilian_jiu-jitsu" rel="noopener noreferrer"&gt;artículo aparte sobre el jiu-jitsu brasileño&lt;/a&gt;, pero si buscas «jiu-jitsu» o «jiujitsu», te redirige al artículo sobre el jujutsu. Sin esa redirección, quizá hoy el proyecto se llamaría Jiu-jitsu.&lt;/p&gt;

&lt;p&gt;Entonces, ¿queda claro que el nombre se refiere al arte marcial? No del todo. El autor dice que nunca le dio al nombre ningún significado especial. Cuando alguien propuso renombrar Jujutsu a Jojo&lt;sup&gt;12&lt;/sup&gt;, tampoco pareció muy apegado a Jujutsu, y sugirió que podían hacer una votación. También hubo una propuesta para adoptar oficialmente otro significado y otra pronunciación&lt;sup&gt;13&lt;/sup&gt;. En japonés, «jujutsu» puede corresponder a dos palabras distintas: 柔術 (jūjutsu, el arte marcial) y 呪術 (jujutsu, hechicería, la palabra de &lt;em&gt;Jujutsu Kaisen&lt;/em&gt;; las maldiciones son otra palabra). La propuesta era hacer oficial 呪術, y al propio autor la idea le gustó al principio. Al final, sin embargo, se dejó de lado definir un significado o una pronunciación oficiales.&lt;/p&gt;

&lt;p&gt;El logo oficial, que se usa desde 2025, muestra la misma postura de no darle al nombre ningún significado en particular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F62k02ofcc8dazebm77hn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F62k02ofcc8dazebm77hn.png" alt="El logo de Jujutsu" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El logo muestra dos pájaros azules de espaldas uno al otro. Son arrendajos, de la familia de los cuervos, llamados &lt;em&gt;jays&lt;/em&gt; en inglés. La palabra &lt;em&gt;jay&lt;/em&gt; se pronuncia igual que la letra J en inglés: dos arrendajos forman «jay jay», es decir, jj. No solo el nombre: el logo también es un juego de palabras con jj. Si el arte marcial fuera el significado oficial, el logo seguramente mostraría algo relacionado con él, pero no es así.&lt;/p&gt;

&lt;p&gt;Al final, todo empezó con jj, un nombre de comando corto y fácil de escribir. El proyecto se llamó Jujutsu por el arte marcial y, aun así, oficialmente no significa ni 柔術 ni 呪術. Jujutsu es simplemente Jujutsu, y probablemente esa sea la verdadera respuesta a la pregunta de dónde viene el nombre.&lt;/p&gt;
&lt;h2&gt;
  
  
  ¿Todavía te quedan preguntas?
&lt;/h2&gt;

&lt;p&gt;Estas fueron siete preguntas que suelen hacerse los usuarios de Git cuando consideran darle una oportunidad a Jujutsu. Algunas de estas respuestas están reelaboradas a partir de las preguntas frecuentes del capítulo 5, «Guía de resolución de problemas de Jujutsu», de mi libro &lt;strong&gt;&lt;em&gt;Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://juju-chu.com/es" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Fog%2Fes%2Fdefault.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://juju-chu.com/es" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Una guía práctica para adoptar Jujutsu (jj) junto a Claude Code y Codex: snapshots automáticos, operaciones que siempre se pueden deshacer y una reescritura del historial que es segura.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Ficons%2Ffavicon.ico" width="48" height="48"&gt;
          juju-chu.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;El libro responde muchas más de las preguntas que suelen tener quienes recién llegan a Jujutsu, y explica cómo resolver los problemas con los que probablemente te encuentres cuando empieces. Si estás arrancando con Jujutsu, debería ahorrarte mucho tiempo, así que échale un vistazo.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-jj-plug"&gt;
&lt;p&gt;Además de Git, Jujutsu también puede usar como backend &lt;a href="https://en.wikipedia.org/wiki/Piper_(source_control_system)" rel="noopener noreferrer"&gt;Piper&lt;/a&gt;, el sistema de control de versiones que se usa dentro de Google, pero esa parte no es pública. Un backend nativo de Jujutsu parece estar en la lista de deseos, pero no se ha anunciado ningún plan concreto. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-submod-sup"&gt;
&lt;p&gt;&lt;a href="https://docs.jj-vcs.dev/latest/roadmap/#submodule-support" rel="noopener noreferrer"&gt;“Submodule support - Development roadmap - Jujutsu docs”&lt;/a&gt;
&lt;a href="https://github.com/jj-vcs/jj/issues/494" rel="noopener noreferrer"&gt;“Add support for Git submodules · Issue #494 · jj-vcs/jj”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-gh-lg-file"&gt;
&lt;p&gt;&lt;a href="https://docs.github.com/es/repositories/working-with-files/managing-large-files/about-large-files-on-github" rel="noopener noreferrer"&gt;“Acerca de los archivos grandes en GitHub - Documentación de GitHub”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-sup-lfs"&gt;
&lt;p&gt;&lt;a href="https://github.com/jj-vcs/jj/issues/80" rel="noopener noreferrer"&gt;“Add support for Git LFS · Issue #80 · jj-vcs/jj”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-no-verify"&gt;
&lt;p&gt;&lt;a href="https://github.com/jj-vcs/jj/blob/main/lib/src/git_subprocess.rs" rel="noopener noreferrer"&gt;“jj/lib/src/git_subprocess.rs at main · jj-vcs/jj”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-other-immutable"&gt;
&lt;p&gt;La documentación oficial también muestra otras configuraciones, como una que impide reescribir commits creados por otras personas.
&lt;a href="https://www.jj-vcs.dev/latest/config/#set-of-immutable-commits" rel="noopener noreferrer"&gt;“Set of immutable commits - Configuration - Jujutsu docs”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-git-cmd-table"&gt;
&lt;p&gt;La documentación oficial también tiene una. &lt;a href="https://docs.jj-vcs.dev/latest/git-command-table/" rel="noopener noreferrer"&gt;“Git command table - Jujutsu docs”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-contrib"&gt;
&lt;p&gt;&lt;a href="https://docs.jj-vcs.dev/latest/paid_contributors/" rel="noopener noreferrer"&gt;“Paying employers and their contributing employees - Jujutsu docs”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-jjcon-keynote"&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=VwmFyowbSR0" rel="noopener noreferrer"&gt;“JJ Con • Keynote - YouTube”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-other-tool"&gt;
&lt;p&gt;&lt;a href="https://docs.github.com/es/pull-requests/reference/use-other-tools-with-stacked-pull-requests" rel="noopener noreferrer"&gt;“Usa otras herramientas con pull requests apiladas - Documentación de GitHub”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-disc3021"&gt;
&lt;p&gt;&lt;a href="https://github.com/jj-vcs/jj/discussions/3021" rel="noopener noreferrer"&gt;“Question: What’s ‘jujutsu’ from? · jj-vcs/jj · Discussion #3021”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-disc2520"&gt;
&lt;p&gt;&lt;a href="https://github.com/jj-vcs/jj/discussions/2520" rel="noopener noreferrer"&gt;“Proposal: Rename Jujutsu to Jojo · jj-vcs/jj · Discussion #2520”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-pr3042"&gt;
&lt;p&gt;&lt;a href="https://github.com/jj-vcs/jj/pull/3042" rel="noopener noreferrer"&gt;“meta: cement “Jujutsu” (呪術) as the project name by thoughtpolice · Pull Request #3042 · jj-vcs/jj”&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>jujutsu</category>
      <category>git</category>
      <category>github</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Jujutsu no tiene un paso para «crear una rama», y así por fin entendí las ramas de Git</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Tue, 13 Oct 2026 12:43:00 +0000</pubDate>
      <link>https://dev.to/jujuchu-es/jujutsu-no-tiene-un-paso-para-y-asi-por-fin-entendi-las-ramas-de-git-186a</link>
      <guid>https://dev.to/jujuchu-es/jujutsu-no-tiene-un-paso-para-y-asi-por-fin-entendi-las-ramas-de-git-186a</guid>
      <description>&lt;h2&gt;
  
  
  ¿Jujutsu no tiene ramas?
&lt;/h2&gt;

&lt;p&gt;Cuando empecé a usar &lt;strong&gt;&lt;a href="https://www.jj-vcs.dev/" rel="noopener noreferrer"&gt;Jujutsu&lt;/a&gt;&lt;/strong&gt; después de años de trabajar con Git y acostumbrarme a sus flujos de trabajo, lo primero que me desconcertó fue que &lt;strong&gt;no había ninguna rama a la que perteneciera mi trabajo actual&lt;/strong&gt;. Si empiezas con Git, te enseñan la rutina: antes de ponerte a trabajar en serio, crea una rama. Incluso en un proyecto personal en el que te saltas ese paso, al menos estás en la rama main.&lt;/p&gt;

&lt;p&gt;Sin embargo, la &lt;a href="https://docs.jj-vcs.dev/latest/tutorial/" rel="noopener noreferrer"&gt;documentación oficial&lt;/a&gt; y el &lt;a href="https://steveklabnik.github.io/jujutsu-tutorial/" rel="noopener noreferrer"&gt;popular tutorial&lt;/a&gt; se lanzan directamente al trabajo. Nadie crea una rama ni se cambia a otra. De hecho, por más que busqué, no encontré en Jujutsu nada llamado «rama» (branch) que se pudiera manipular. En su lugar hay algo llamado &lt;strong&gt;bookmark&lt;/strong&gt; , que se mapea como una rama al trabajar con Git. Y aun así, un bookmark no es lo mismo que una rama. No entendía nada.&lt;/p&gt;

&lt;p&gt;Pero después de hacer push de mi trabajo en Jujutsu y abrir PRs con él unas cuantas veces siguiendo las guías, se me ocurrió algo: quizá Git y Jujutsu simplemente se refieren a cosas distintas con la palabra «rama». Con esa idea en mente, volví a leer &lt;a href="https://git-scm.com/book/es/v2/Ramificaciones-en-Git-%C2%BFQu%C3%A9-es-una-rama%3F" rel="noopener noreferrer"&gt;el capítulo sobre ramas&lt;/a&gt; de &lt;em&gt;Pro Git&lt;/em&gt;&lt;sup&gt;1&lt;/sup&gt; y la &lt;a href="https://docs.jj-vcs.dev/latest/bookmarks/" rel="noopener noreferrer"&gt;página sobre bookmarks&lt;/a&gt; de la documentación de Jujutsu, y por fin todo encajó. Una rama de Git no es una «rama» en sentido literal, y hay buenas razones para que Jujutsu llame «bookmark» a su equivalente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa realmente «una rama de Git es un puntero»
&lt;/h2&gt;

&lt;p&gt;Entonces, ¿qué es exactamente una rama de Git? La sección 3.1 de &lt;em&gt;Pro Git&lt;/em&gt; describe las ramificaciones así:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cuando hablamos de ramificaciones, significa que tú has tomado la rama principal de desarrollo (master) y a partir de ahí has continuado trabajando sin seguir la rama principal de desarrollo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si sigues leyendo, encuentras esto:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Una rama Git es simplemente un apuntador móvil apuntando a una de esas confirmaciones.&lt;br&gt;&lt;br&gt;
[…]&lt;br&gt;&lt;br&gt;
¿Qué sucede cuando creas una nueva rama? Bueno…, simplemente se crea un nuevo apuntador para que lo puedas mover libremente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;«Una rama es un puntero»&lt;/strong&gt; (o apuntador, en inglés &lt;em&gt;pointer&lt;/em&gt;). Si llevas un tiempo usando Git, seguro que has oído esa frase. Me da algo de vergüenza admitirlo, pero nunca me dijo gran cosa, y durante años usé las ramas por pura intuición (al tanteo). Ahora entiendo por qué. La explicación se apoya en varias premisas que nadie menciona, y a quienes tuvieron Git como primer VCS no les dice mucho. La documentación oficial de Git y los libros clásicos los escribieron veteranos que conocían bien otros sistemas de control de versiones, y es fácil que pasen por alto que quienes empezaron con Git no comparten esas premisas.&lt;/p&gt;

&lt;p&gt;¿Qué hace falta saber, entonces, para que «una rama es un puntero» tenga sentido? Lo primero es que, en Git, &lt;strong&gt;una rama no es la bifurcación del historial en sí&lt;/strong&gt;. Para distinguir ambas cosas, &lt;em&gt;Pro Git&lt;/em&gt; usa expresiones como «el historial diverge» (divergent history) para referirse a la bifurcación misma&lt;sup&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;La mayoría de los VCS distribuidos representan el historial como un DAG&lt;sup&gt;3&lt;/sup&gt; y no como un árbol, así que las bifurcaciones y las fusiones se expresan por completo dentro del grafo. En lo que se diferencian los VCS es en el mecanismo que le dan al usuario para ver y manipular esas bifurcaciones, y la mayoría llama «rama» a ese mecanismo. En &lt;a href="https://www.mercurial-scm.org/" rel="noopener noreferrer"&gt;Mercurial&lt;/a&gt;, que apareció más o menos al mismo tiempo que Git, una rama es un metadato que queda incrustado de forma permanente en cada commit de una línea del historial. Git, en cambio, usa un puntero por cada línea del historial, y cada uno apunta a un solo commit.&lt;/p&gt;

&lt;p&gt;¿Todavía no queda claro? Pasemos a la segunda premisa. Lo que distingue a Git de otros VCS es que, &lt;strong&gt;estés donde estés, siempre te lleva automáticamente a la punta del historial&lt;/strong&gt;. En los VCS anteriores, crear ramas y cambiar de una a otra eran operaciones pesadas que ralentizaban seriamente proyectos grandes como el kernel de Linux. Hacerlas rapidísimas fue uno de los objetivos clave al diseñar Git. La solución fue convertir la rama en un puntero móvil a un solo commit, guardado en un archivo de texto de apenas unas decenas de bytes.&lt;/p&gt;

&lt;p&gt;Para que eso funcione, Git espera que edites el código en la línea de trabajo a la que apunta alguna rama, y el puntero de la rama avanza automáticamente con cada nuevo commit. Cambiar de rama significa hacer que HEAD, el puntero que indica dónde estás, coincida con esa rama. Por eso en Git, vayas adonde vayas, siempre terminas en la punta más reciente del historial.&lt;/p&gt;

&lt;p&gt;Como Git era el único VCS distribuido que conocía, daba por hecho que así funcionaban todos. Descubrir que ese comportamiento es propio de Git, y entender el mecanismo que hay detrás, fue lo que por fin me permitió entender qué significa que una rama de Git sea un puntero.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué pasa con una bifurcación del historial sin rama?
&lt;/h2&gt;

&lt;p&gt;Entonces, ¿puede haber en Git una bifurcación del historial que no sea una rama? Crear una es muy fácil: haz checkout de un commit anterior usando su hash.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git checkout 9effb1cc737824d9c14e1a8ecbb725e44ccae104
Note: switching to &lt;span class="s1"&gt;'9effb1cc737824d9c14e1a8ecbb725e44ccae104'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

You are &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s1"&gt;'detached HEAD'&lt;/span&gt; state. You can look around, make experimental
changes and commit them, and you can discard any commits you make &lt;span class="k"&gt;in &lt;/span&gt;this
state without impacting any branches by switching back to a branch.
⋮
HEAD is now at 9effb1c create b.txt

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'444'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; d.txt
&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'create d.txt'&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;detached HEAD 46b43c3] create d.txt
 1 file changed, 1 insertion&lt;span class="o"&gt;(&lt;/span&gt;+&lt;span class="o"&gt;)&lt;/span&gt;
 create mode 100644 d.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Git se toma la molestia de advertirte que ahora estás en estado de &lt;strong&gt;detached HEAD&lt;/strong&gt; (HEAD desacoplado). Normalmente HEAD apunta a alguna rama. Cuando, en cambio, apunta directamente al hash de un commit concreto, se dice que HEAD está desacoplado. Acumular commits en este estado se considera arriesgado y conviene evitarlo, porque ese historial termina así:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No lo puedes encontrar después&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se trata como basura y termina borrándose&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No lo puedes compartir con nadie&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En Git, los commits solo se vuelven rastreables para las personas cuando pertenecen a una rama o a un tag. Los commits que haces con HEAD desacoplado pierden su referencia en cuanto cambias de rama, y ni siquiera aparecen en &lt;code&gt;git log --all&lt;/code&gt;. El reflog es la única forma de recuperarlos. Además, el sistema los considera historial innecesario y quedan expuestos a la recolección de basura, así que, una vez vencido el plazo, desaparecen para siempre. Si son commits que tú mismo puedes perder de vista con facilidad y que pueden desaparecer en cualquier momento, difícilmente se pueden compartir con otras personas.&lt;/p&gt;
&lt;h2&gt;
  
  
  Por qué Jujutsu tiene bookmarks en lugar de ramas
&lt;/h2&gt;

&lt;p&gt;Como dije al principio, Jujutsu no tiene nada llamado «rama» que se pueda manipular. Aun así, la palabra «branch» aparece por todas partes en su documentación, con su sentido literal de bifurcación del historial. Jujutsu no tiene el concepto de «rama actual» ni ningún mecanismo específico para identificar las bifurcaciones del historial, así que «branch» se usa en su sentido original y literal.&lt;/p&gt;

&lt;p&gt;Entonces, ¿por qué Jujutsu no tiene ramas como las de Git o Mercurial? En Git, hacer amend o rebase de un commit le da un hash completamente nuevo. Los hashes que cambian constantemente son difíciles de seguir, tanto para el sistema como para las personas, así que un commit necesita pertenecer a una rama: una etiqueta con nombre, estable, que indica en qué línea de trabajo está. En Jujutsu, en cambio, la unidad básica del historial, el change, tiene un &lt;strong&gt;change ID inmutable&lt;/strong&gt; , distinto de su commit ID, que cambia cada vez que se revisa el change. Sin importar cuántas veces reescribas su contenido o le hagas rebase, puedes seguir un change con el mismo ID, así que no hace mucha falta etiquetar cada línea de trabajo.&lt;/p&gt;

&lt;p&gt;Además, las bifurcaciones del historial siempre se muestran en el log como un grafo en arte ASCII. Entre el grafo que ves en el log y las descripciones de los changes que forman sus nodos, salta a la vista a qué línea de trabajo pertenece cada change. Y cualquier change que tenga descripción o que modifique archivos se queda en el historial hasta que lo descartes explícitamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3v8q1eooxrzyvsdgic1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3v8q1eooxrzyvsdgic1n.png" alt="Log de Jujutsu" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como las ramas no tienen nombre, en Jujutsu lo normal es trabajar en el equivalente al HEAD desacoplado de Git. Jujutsu lo llama &lt;strong&gt;rama anónima&lt;/strong&gt; (anonymous branch). El HEAD desacoplado se considera peligroso, pero las ramas anónimas de Jujutsu no tienen los dos primeros problemas que ese estado tiene en Git: «1. No lo puedes encontrar después» y «2. Se trata como basura y termina borrándose». ¿Y qué pasa con «3. No lo puedes compartir con nadie»? Para eso Jujutsu ofrece los &lt;strong&gt;bookmarks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Un bookmark es un puntero con nombre asociado a un change. Tanto los bookmarks como las ramas de Git son punteros con nombre, pero, a diferencia de una rama de Git, un bookmark es solo una marca para compartir con otras personas o para no olvidarte de algo, sin relación directa con las bifurcaciones del historial. Por eso puedes poner varios bookmarks en la misma línea de trabajo, y también por eso, cuando creas nuevos changes sobre ese change, un bookmark no avanza por sí solo como lo hace una rama de Git.&lt;/p&gt;

&lt;p&gt;Jujutsu no ve la necesidad de ponerles nombre a las bifurcaciones del historial, ni de señalar una línea de trabajo divergente completa solo para compartir historial con otras personas. Por eso Jujutsu tiene bookmarks en lugar de ramas.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ramas anónimas + bookmarks: hacia dónde ha llegado la evolución de los VCS
&lt;/h2&gt;

&lt;p&gt;En Git, tanto crear bifurcaciones del historial como fusionarlas se hace, en principio, a nivel de rama. ¿Y cómo lo resuelve Jujutsu, que no tiene ramas?&lt;/p&gt;

&lt;p&gt;En Jujutsu, el comando que crea un change nuevo, la unidad básica del historial, es &lt;code&gt;jj new&lt;/code&gt;. ¿Cómo se crea una bifurcación del historial? Pasándole a &lt;code&gt;jj new&lt;/code&gt; el ID de un change que ya tiene un hijo. ¿Cómo se fusiona un historial que diverge? Pasándole a &lt;code&gt;jj new&lt;/code&gt; los IDs de los changes que quieres fusionar. En Jujutsu, &lt;strong&gt;extender el historial, bifurcarlo y fusionarlo se hace a nivel de change&lt;/strong&gt; , y, sorprendentemente, todo es la misma operación básica: crear un change nuevo.&lt;/p&gt;

&lt;p&gt;Sigues trabajando así hasta un punto en el que tiene sentido parar. Es hora de abrir un PR. Es justo en este punto donde necesitas ponerle nombre a esa línea de trabajo&lt;sup&gt;4&lt;/sup&gt;. Pones un bookmark en un change, haces push, y toda la serie de changes, desde donde se separó de main hasta ese change, queda registrada como una rama en el repositorio Git remoto, con cada change convertido en un commit de Git.&lt;/p&gt;

&lt;p&gt;¿Qué se gana cuando &lt;strong&gt;la unidad para compartir no está atada a las ramas&lt;/strong&gt;? En primer lugar, flexibilidad: puedes empezar a trabajar sin decidir un nombre ni qué vas a compartir, y resolver esas cuestiones solo cuando llegue el momento de compartir. En segundo lugar, facilita armar una serie de PRs dependientes, algo que últimamente se ha vuelto mucho más valioso. Los stacked pull requests de GitHub, que permiten dividir un PR en unidades pequeñas con relaciones padre-hijo, por fin pasaron a disponibilidad general el 6 de octubre de 2026&lt;sup&gt;5&lt;/sup&gt;, y con los bookmarks de Jujutsu es muy fácil trabajar con ellos. Para armar stacked PRs con Git, creas la primera rama con &lt;code&gt;gh stack init&lt;/code&gt;, creas una rama hija con &lt;code&gt;gh stack add&lt;/code&gt; cada vez que terminas una parte del trabajo y, al final, haces push y abres los PRs con &lt;code&gt;gh stack submit&lt;/code&gt;. Es un proceso bastante tedioso y dependiente de herramientas específicas. Con Jujutsu, pones bookmarks en orden sobre tu línea de trabajo, haces push y ejecutas algo como &lt;code&gt;gh stack link &amp;lt;bookmark1&amp;gt; &amp;lt;bookmark2&amp;gt; &amp;lt;bookmark3&amp;gt;&lt;/code&gt;. Eso es todo. Es casi anticlimático de lo fácil que resulta.&lt;/p&gt;

&lt;p&gt;Al no tener ramas, Jujutsu replanteó las operaciones que Git había construido en torno a ellas, de modo que puedes trabajar en unidades más pequeñas y flexibles. Después de convivir un tiempo con un Jujutsu sin ramas, por fin entendí qué son las ramas de Git, después de años de usarlas con una idea vaga. Y entonces los conceptos de Jujutsu, tan distintos de los de Git, empezaron a parecerme sorprendentemente lógicos. Esa sensación se vuelve aún más fuerte cuando tomas distancia y miras la historia de los VCS.&lt;/p&gt;

&lt;p&gt;Ya mencioné que Mercurial tiene un tipo de rama distinto del de Git. Pero como las ramas de Mercurial son datos permanentes y globales incrustados en cada commit, no encajan bien con el desarrollo de funcionalidades o las correcciones de bugs que se terminan en pocos días. Por eso más tarde se agregaron los bookmarks para el trabajo liviano: marcas de tipo puntero que servían para pasar el trabajo al hacer push o para señalar dónde estabas trabajando. Inspirados en las ramas de Git, pero independientes de las ramas de Mercurial y pensados para compartir. De ahí vienen los bookmarks de Jujutsu.&lt;/p&gt;

&lt;p&gt;Jujutsu va un paso más allá: considera que las ramas son innecesarias para las bifurcaciones del historial y directamente no las tiene. Curiosamente, &lt;a href="https://sapling-scm.com/" rel="noopener noreferrer"&gt;Sapling&lt;/a&gt;, que Meta creó a partir de un fork de Mercurial y desarrolló por su cuenta, tampoco tiene ramas, pero sí bookmarks. Se podría decir que «ramas anónimas + bookmarks» es uno de los destinos a los que ha llegado la evolución del control de versiones, de Git a Jujutsu pasando por Mercurial.&lt;/p&gt;

&lt;p&gt;Una última aclaración: este artículo se basa en las secciones «2-4-2. La diferencia entre branch y bookmark» y «2-4-3. Trabajar en branches anónimas» de mi libro, &lt;em&gt;Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://juju-chu.com/es" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Fog%2Fes%2Fdefault.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://juju-chu.com/es" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Una guía práctica para adoptar Jujutsu (jj) junto a Claude Code y Codex: snapshots automáticos, operaciones que siempre se pueden deshacer y una reescritura del historial que es segura.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Ficons%2Ffavicon.ico" width="48" height="48"&gt;
          juju-chu.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Los primeros capítulos del libro se centran en la diferencia entre los modelos mentales de Git y de Jujutsu. Además de las ramas frente a los bookmarks, explican con cuidado los otros puntos en los que suelen tropezar quienes empiezan. Si este artículo te dio ganas de probar Jujutsu, o de darle otra oportunidad después de que la primera vez no te convenciera, échale un vistazo.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-pro-git"&gt;
&lt;p&gt;Libro de código abierto sobre Git escrito por Scott Chacon y Ben Straub, que también se usa como documentación oficial de Git. Se puede leer gratis en línea. &lt;a href="https://git-scm.com/book/es/v2" rel="noopener noreferrer"&gt;https://git-scm.com/book/es/v2&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-divergent"&gt;
&lt;p&gt;&lt;a href="https://git-scm.com/book/es/v2/Ramificaciones-en-Git-%C2%BFQu%C3%A9-es-una-rama%3F#rdivergent_history" rel="noopener noreferrer"&gt;https://git-scm.com/book/es/v2/Ramificaciones-en-Git-%C2%BFQu%C3%A9-es-una-rama%3F#rdivergent_history&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-dag"&gt;
&lt;p&gt;Siglas en inglés de Directed Acyclic Graph (grafo acíclico dirigido): una estructura de grafo en la que los nodos, unidos por aristas con dirección, nunca forman un ciclo. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-move-bookmark"&gt;
&lt;p&gt;Si prefieres ponerle nombre desde el principio, por supuesto también puedes hacerlo. Crea un bookmark con &lt;code&gt;jj bookmark create&lt;/code&gt; al empezar a trabajar y, antes de hacer push, muévelo al change que corresponda con &lt;code&gt;jj bookmark move&lt;/code&gt; o &lt;code&gt;jj bookmark advance&lt;/code&gt;. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-spr-available"&gt;
&lt;p&gt;&lt;a href="https://github.blog/changelog/2026-10-06-stacked-pull-requests-generally-available/" rel="noopener noreferrer"&gt;Stacked pull requests generally available - GitHub Changelog&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>git</category>
      <category>jujutsu</category>
      <category>jj</category>
    </item>
    <item>
      <title>Por qué sigo eligiendo Jujutsu aunque la IA pueda encargarse de Git</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Tue, 06 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/jujuchu-es/por-que-sigo-eligiendo-jujutsu-aunque-la-ia-pueda-encargarse-de-git-1844</link>
      <guid>https://dev.to/jujuchu-es/por-que-sigo-eligiendo-jujutsu-aunque-la-ia-pueda-encargarse-de-git-1844</guid>
      <description>&lt;p&gt;&lt;strong&gt;«Si un agente de IA ya se encarga de Git, ¿para qué aprender otro sistema de control de versiones como &lt;a href="https://www.jj-vcs.dev/" rel="noopener noreferrer"&gt;Jujutsu&lt;/a&gt;?»&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esa fue la objeción más repetida a mi último artículo, &lt;a href="https://dev.to/jujuchu-es/15-anos-de-git-y-luego-jujutsu-por-que-ya-no-puedo-volver-4jjm"&gt;15 años de Git y luego Jujutsu: por qué ya no puedo volver&lt;/a&gt;. Es una pregunta razonable y, además, interesante, así que este artículo es mi respuesta.&lt;/p&gt;

&lt;p&gt;Estoy de acuerdo en que el control de versiones del día a día es trabajo para un agente de IA. Así es exactamente como trabajo yo. La diferencia es que los comandos que ejecutan mis agentes son de Jujutsu, no de Git. Después de probar las dos cosas, estoy convencida de que, incluso cuando la IA va al volante, Jujutsu ofrece una experiencia de desarrollo mucho mejor, y de que el tiempo que inviertes en aprenderlo se recupera enseguida.&lt;/p&gt;

&lt;p&gt;Antes de exponer mis argumentos, conviene despejar una duda evidente: ¿de verdad la IA sabe manejar Jujutsu? Lo comprobé con Opus, GPT, Gemini y otros. Los modelos más recientes ya conocen los conceptos básicos y los comandos principales de Jujutsu, y pueden encargarse de las operaciones cotidianas sin cargar ningún skill adicional. Eso sí, Jujutsu no está tan integrado en las herramientas de los agentes como Git, así que hace falta algo de configuración para evitar que el agente vuelva a Git sin avisar y para enseñarle un flujo de trabajo adecuado para Jujutsu. &lt;a href="https://juju-chu.com/es/agent-config" rel="noopener noreferrer"&gt;Esta es la configuración que uso yo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  La ceremonia del commit en Git frente a los changes sin fricción de Jujutsu
&lt;/h2&gt;

&lt;p&gt;En Git, la unidad básica del historial es el &lt;strong&gt;commit&lt;/strong&gt;. El flujo estándar es este: editas archivos en el working tree, eliges los que quieres y los añades al índice, y después escribes un mensaje y creas un commit. Solo entonces queda algo registrado en el historial. Un commit está pensado para ser un producto terminado, algo que se elabora con cuidado, y por eso Git te ofrece el índice como área de staging. Editar un archivo y lograr que esos cambios queden registrados en el historial exige una secuencia de pasos larga y rígida. Es casi un ritual.&lt;/p&gt;

&lt;p&gt;Así que, aunque le cedas Git a una IA, sigues terminando cada tarea pidiéndole &lt;strong&gt;«haz commit de esto»&lt;/strong&gt;. Pide cualquier operación sobre el historial a mitad de una tarea y llega el intercambio de siempre: &lt;strong&gt;«Tienes cambios sin commit. ¿Los guardo en el stash o hago commit primero?»&lt;/strong&gt;. Cada ronda quizá solo lleve medio minuto, pero ocurre constantemente y todo suma. También hay un costo cognitivo, que pagan tanto tú como la IA, lo notes o no.&lt;/p&gt;

&lt;p&gt;En Jujutsu, la unidad básica del historial es el &lt;strong&gt;change&lt;/strong&gt;. Cuando inicializas un repositorio, empiezas en un change vacío. Cada edición que haces ahí se guarda sobre la marcha como una nueva revisión de ese change&lt;sup&gt;1&lt;/sup&gt;. Puedes añadirle una descripción, el equivalente en Jujutsu a un mensaje de commit, cuando quieras. Un change nunca tiene un momento en que quede oficialmente «terminado»&lt;sup&gt;2&lt;/sup&gt;. Cuando acabas el trabajo, simplemente pasas a otra cosa.&lt;/p&gt;

&lt;p&gt;Eso significa que, cuando una IA maneja Jujutsu por ti, basta con una instrucción permanente: empezar cada tarea en un change nuevo con su descripción&lt;sup&gt;3&lt;/sup&gt;. A partir de ahí solo tienes que decir «crea la funcionalidad X», y tu historial queda dividido en unidades razonables que siguen el hilo del trabajo. Se acabó el «haz commit de esto» al final de cada tarea, y se acabó que te pidan ordenar la copia de trabajo antes de una operación sobre el historial.&lt;/p&gt;

&lt;p&gt;Jujutsu es compatible con Git, pero no hay ningún índice entre tu directorio de trabajo y tu repositorio local. Es más, el estado de tu directorio de trabajo &lt;em&gt;es&lt;/em&gt; el punto actual del historial (Jujutsu lo llama «working copy as a commit», la copia de trabajo como commit). En Git, tanto las personas como la IA tienen que seguir la pista de &lt;strong&gt;tres estados&lt;/strong&gt; por cada cambio en un archivo. En Jujutsu, normalmente hay &lt;strong&gt;solo uno&lt;/strong&gt;. Solo después de pasarme a Jujutsu me di cuenta de cuánto esfuerzo mental extra gastaba en ajustarme a la forma de hacer las cosas de Git, y de lo estresante que era todo ese llevar la cuenta.&lt;/p&gt;

&lt;p&gt;Habrá quien diga que esto no le molesta en absoluto. Me parece bien. Hay mucha gente a la que de verdad no le importa ponerse traje y estar en la oficina a las 8:30 cada mañana. Pero imagina pasar de eso a un trabajo sin código de vestimenta, con horario flexible y trabajo remoto hasta tres días por semana, y encontrarlo tan cómodo que ya no podrías volver atrás. Eso es lo que sentí con el cambio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jujutsu hace que los errores de la IA sean fáciles de deshacer
&lt;/h2&gt;

&lt;p&gt;Las personas cometemos errores, y la IA también. Todavía veo de vez en cuando casos de agentes de IA que borran archivos con los que alguien estaba trabajando, sin forma de recuperarlos. Pídele a un agente que resuelva un conflicto y no es raro recibir un resultado que pasa los tests pero está roto a nivel semántico. Y como a los agentes se les dan instrucciones en lenguaje natural, un prompt no siempre transmite bien tu intención, así que a menudo no te convencerá lo que recibes.&lt;/p&gt;

&lt;p&gt;Cuando la IA ejecuta comandos de Git como parte de su trabajo, recuperarse de un mal resultado se vuelve muchísimo más difícil. Git no tiene forma de devolver todo el repositorio al estado en que estaba antes de una operación concreta. Como comenté, Git guarda el estado en varios sitios: el working tree, el índice, el stash y los commits, y cada uno está protegido a su manera, si es que lo está. Rebase, amend y squash no modifican los commits existentes. Crean otros nuevos y mueven la rama hacia ellos, de modo que los commits originales ya no están referenciados por ninguna rama. Siguen en el reflog, pero encontrar la entrada correcta después, enterrada entre todo lo demás, es un verdadero dolor de cabeza.&lt;/p&gt;

&lt;p&gt;Para compensar que Git no guarda los cambios sin commit, Claude Code ofrece el comando &lt;code&gt;/rewind&lt;/code&gt;, que devuelve el código a un punto anterior junto con la conversación. Pero no se lleva bien con un agente que ejecuta comandos de Git. Tus archivos vuelven atrás, pero el estado de Git no, así que de repente &lt;code&gt;git status&lt;/code&gt; muestra un montón de cambios que nunca quisiste, y otra vez te toca poner orden en el historial. Y lo que se haya cambiado con comandos de shell, a mano o mediante otros agentes que se ejecutan en paralelo no se revierte en absoluto.&lt;/p&gt;

&lt;p&gt;Si detectas un error en el momento, todavía vas bien. Pero lo más habitual es que salga a la luz más tarde, cuando ejecutas los tests después de seguir trabajando o cuando revisas las cosas días después. Para entonces es mucho más difícil desenredarlo. Se han acumulado más operaciones encima de la errónea y, aunque te emplees a fondo con el reflog, nada garantiza que una larga serie de pasos delicados vaya a arreglarlo. Peor aún, Git no te da ninguna forma de deshacer el propio intento de recuperación. Una IA que prueba un arreglo tras otro para salir del agujero puede empeorar las cosas con facilidad.&lt;/p&gt;

&lt;p&gt;Jujutsu resuelve casi todo esto. Por regla general, el resultado de cualquier comando &lt;code&gt;jj&lt;/code&gt; se puede revertir con &lt;code&gt;jj undo&lt;/code&gt;, y el propio undo se puede deshacer con &lt;code&gt;jj redo&lt;/code&gt;. Esto es posible porque Jujutsu lleva, aparte del log normal, un registro de cada operación que modifica el repositorio: el &lt;strong&gt;operation log&lt;/strong&gt;. Cada entrada del operation log está ligada a una instantánea del repositorio tal como quedó al terminar esa operación. Puedes restaurar los archivos a ese estado, o revertir solo el efecto de esa operación conservando todo lo que vino después.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcasjsavrt5w9v9w4j1dm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcasjsavrt5w9v9w4j1dm.png" alt="El operation log de Jujutsu" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada comando &lt;code&gt;jj&lt;/code&gt; que ejecuta una IA durante una larga sesión de ensayo y error también queda en el operation log. Cuando algo sale mal, puedes repasar todo lo que hizo la IA, localizar la causa y volver al estado justo anterior a que las cosas se torcieran.&lt;/p&gt;

&lt;p&gt;Además, a diferencia del hash de un commit de Git, que cambia cada vez que editas el commit, el change ID de Jujutsu se mantiene igual por muchas veces que se revise el change. Puedes consultar el historial de revisiones de un change en el &lt;strong&gt;evolution log&lt;/strong&gt; y, con un poco de trabajo, seguirle la pista hacia atrás y restaurar el contenido de una versión anterior. Si lo acotas por fecha y hora o por diff, puedes incluso recuperarte de una resolución de conflictos fallida de hace varios días y volver a hacerla.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwwgp4filcvseq706r60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwwgp4filcvseq706r60.png" alt="El evolution log de Jujutsu" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada edición se guarda en el historial sobre la marcha. El operation log y el evolution log te permiten encontrar dónde se torcieron las cosas y volver a ese punto. Y si la propia recuperación sale mal, &lt;code&gt;jj undo&lt;/code&gt; y &lt;code&gt;jj redo&lt;/code&gt; te dejan intentarlo de nuevo al momento. Es un nivel de seguridad que Git sencillamente no ofrece. Por eso, con Jujutsu me siento mucho más cómoda delegando el control de versiones a una IA y dejando que actúe con más audacia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué un historial limpio importa más en la era de la programación con IA
&lt;/h2&gt;

&lt;p&gt;Otro comentario que destacó en mi último artículo fue &lt;strong&gt;«no me importa mantener el historial limpio, así que no le veo sentido a Jujutsu»&lt;/strong&gt;. El razonamiento parece ser que, aunque el historial sea un desastre, basta con pedirle a la IA que encuentre lo que necesites. Pero ¿es realmente así? Yo diría que es al revés: precisamente porque con la IA escribimos y leemos menos código, un historial limpio importa más que nunca.&lt;/p&gt;

&lt;p&gt;Los agentes de programación han mejorado tanto que muchos desarrolladores ya apenas escriben código y tampoco leen cada línea que genera la IA. Aun así, siguen velando por la calidad de lo que se publica, ya sea haciendo que un agente con otro modelo revise el trabajo o revisando por su cuenta las partes críticas, como los cambios en las estructuras de datos. Si puedes rastrear directamente en el historial qué cambió, por qué y de qué depende, todo eso se hace más rápido y con menos errores. Precisamente porque nadie revisa cada línea, &lt;strong&gt;tu historial de commits tiene que funcionar como el índice del código&lt;/strong&gt; , para que puedas encontrar las partes que importan. Una sucesión de commits gigantes sin una intención clara obliga a la IA a cargar contexto irrelevante cada vez, lo que consume tokens y puede perjudicar la calidad de su trabajo.&lt;/p&gt;

&lt;p&gt;Al empezar cada sesión, lo normal es que un agente mire los diffs significativos más recientes antes que el directorio de trabajo en su conjunto. Mete «una corrección de bug + una actualización de dependencias + contenido sin relación + una refactorización que no viene a cuento» en un solo commit, y el agente se confunde. Ordena commits de tamaño razonable y con una intención clara, en una secuencia que refleje la relación de causa y efecto, y hasta un prompt corto le dará al agente el contexto que necesita para la siguiente tarea.&lt;/p&gt;

&lt;p&gt;Y aunque durante el desarrollo apenas leas el código que genera la IA, un incidente te obligará a leerlo con atención. La primera pregunta ante una caída en producción es «¿cuándo y dónde entró el código problemático?». Cuando cada minuto cuenta, un historial de commits semánticamente coherentes te ayuda a localizar el problema rápido.&lt;/p&gt;

&lt;p&gt;La programación con IA también ha creado un problema nuevo al disparar la productividad: &lt;strong&gt;los PR se vuelven enormes&lt;/strong&gt; → &lt;strong&gt;cuesta revisarlos&lt;/strong&gt; → &lt;strong&gt;los PR sin fusionar se acumulan esperando revisión&lt;/strong&gt;. Ahora incluso equipos de unas pocas personas caen en ese círculo. Grandes tecnológicas como Google y Meta llevan más de una década lidiando con este problema, y su respuesta ha sido «dividir los PR en unidades pequeñas que dependen unas de otras». Supón que normalmente enviarías una funcionalidad entera como un solo PR. En su lugar, la divides en «1. cambios en la capa de modelo», «2. cambios en las tareas programadas», «3. cambios en la API del servidor» y «4. cambios en el frontend web», y los apilas 1 → 2 → 3 → 4. Cada uno se puede revisar, aprobar y fusionar por separado, pero un PR solo se puede fusionar cuando ya se han fusionado los que tiene debajo en la pila (para el 3, el 1 y el 2). Estas empresas lo integraron en sus herramientas y lo usaban en el desarrollo del día a día.&lt;/p&gt;

&lt;p&gt;Los PR pequeños y con un papel lógico claro les ponen las cosas más fáciles a los revisores, y es más fácil identificar los que te toca revisar. Los cambios en la rama de un PR situado más abajo en la pila se propagan automáticamente a las ramas de encima, a las que las herramientas aplican el rebase. Y gracias a las dependencias, puedes empezar con seguridad la siguiente parte del trabajo mientras el primer PR sigue esperando revisión. Esto es lo que se suele llamar &lt;strong&gt;stacked diffs&lt;/strong&gt; o &lt;strong&gt;stacked PRs&lt;/strong&gt;. &lt;a href="https://graphite.com/docs/create-submit-prs" rel="noopener noreferrer"&gt;Graphite&lt;/a&gt;, &lt;a href="https://docs.gitbutler.com/features/branch-management/stacked-branches" rel="noopener noreferrer"&gt;GitButler&lt;/a&gt;, &lt;a href="https://docs.gitlab.com/user/project/merge_requests/reviews/stacked_merge_requests/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; y otros llevan años incorporándolo. Y en julio de 2026, GitHub por fin &lt;a href="https://github.blog/changelog/2026-07-30-stacked-pull-requests-are-now-in-public-preview/" rel="noopener noreferrer"&gt;lanzó los stacked PRs en vista previa pública&lt;/a&gt;. Con el actor principal ya a bordo, todo apunta a que la tendencia va a acelerarse.&lt;/p&gt;

&lt;p&gt;Con la generalización de los monorepos y el impacto de los agentes de IA, la demanda de stacked PRs está creciendo no solo en las grandes empresas, sino también en las pequeñas y medianas. Cuando los stacked PRs forman parte de la forma de trabajar de un equipo, organizar bien las unidades del historial y su orden pasa a ser parte del trabajo de cada desarrollador. Los PR en los que antes cabía cualquier cosa, ahora hay que dividirlos según su papel lógico, con dependencias entre ellos. Y Jujutsu hace que eso sea fácil y seguro.&lt;/p&gt;

&lt;p&gt;Pensemos en dividir un commit gigante en unidades con sentido. Es una tarea difícil, incluso para la IA. En Git, probablemente harías &lt;code&gt;git reset HEAD^&lt;/code&gt; para devolver todo el commit al working tree y luego repetirías el ciclo de añadir al índice y hacer commit, parte por parte. Si te equivocas por el camino, recuperarte implica averiguar exactamente hasta dónde llegaste con la división y qué ediciones quedaron dónde, lo que ya es un dolor de cabeza en sí mismo. Y si el commit que quieres dividir es antiguo, te espera la emoción de encadenar rebases con un HEAD desacoplado (detached HEAD). En Jujutsu, le pasas los archivos a &lt;code&gt;jj split -m &amp;lt;description&amp;gt;&lt;/code&gt; y listo. Si te equivocas, deshaces y vuelves a intentarlo. Cuando lo hace una IA, la división es a nivel de archivo, pero una persona que maneje Jujutsu puede usar &lt;code&gt;jj split -i&lt;/code&gt; para dividir de forma interactiva línea a línea, o consultar el evolution log y dividir el trabajo en el orden en que realmente se hizo.&lt;/p&gt;

&lt;p&gt;Convertir una rama de trabajo en una cadena de ramas dependientes para un stacked PR es bastante complicado en Git. En Jujutsu, basta con ir poniendo bookmarks, uno tras otro, sobre una sola línea del historial. La documentación oficial de GitHub incluso explica paso a paso cómo crear la cadena de ramas de un stacked PR con Jujutsu&lt;sup&gt;4&lt;/sup&gt;. Es genial ver esa compatibilidad reconocida oficialmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que es fácil para las personas también lo es para la IA
&lt;/h2&gt;

&lt;p&gt;Git se diseñó poniendo las funcionalidades por delante de quien las usa. Jujutsu es un sistema de control de versiones creado para resolver los puntos débiles de Git&lt;sup&gt;5&lt;/sup&gt; y para reducir al mínimo la carga cognitiva de las personas. Y lo que le resulta fácil a la mente humana también le resulta fácil a la IA. Nunca tienes que preocuparte de si una edición ha llegado al historial, porque el estado del directorio de trabajo es el punto actual del historial. Un change conserva el mismo ID por muchas veces que se revise, así que nunca se pierde durante largas rondas de ensayo y error. El operation log registra cada operación en orden, así que es fácil ver qué paso salió mal y restaurar desde ahí. Y cuando surge un conflicto a mitad de una tarea, el propio estado en conflicto se guarda en el historial, así que puedes tomarte tu tiempo e intentar resolverlo tantas veces como haga falta. Cada una de estas características es una gran ventaja cuando es la IA quien está a los mandos.&lt;/p&gt;

&lt;p&gt;Jujutsu no está tan integrado en las herramientas de los agentes de IA como Git. Pero les resulta mucho más fácil de entender, y eso tiende a hacer su trabajo más estable y seguro. Aunque le cedas a la IA el control de versiones junto con la programación, elegir Jujutsu para esa tarea tiene todo el sentido.&lt;/p&gt;

&lt;p&gt;Esa es mi opinión, y también el argumento que desarrollo en el «Capítulo 1: ¿Qué clase de herramienta es Jujutsu?» de mi libro, &lt;em&gt;Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;. Ese capítulo recorre el mismo argumento funcionalidad por funcionalidad. El «Capítulo 3: El flujo Jujutsu × IA en la práctica» es una guía práctica para cederles de verdad el manejo de Jujutsu a Claude Code y Codex.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://juju-chu.com/es" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Fog%2Fes%2Fdefault.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://juju-chu.com/es" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Una guía práctica para adoptar Jujutsu (jj) junto a Claude Code y Codex: snapshots automáticos, operaciones que siempre se pueden deshacer y una reescritura del historial que es segura.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Ficons%2Ffavicon.ico" width="48" height="48"&gt;
          juju-chu.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Si este artículo despertó tu curiosidad por Jujutsu, échale un vistazo.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-save-timing"&gt;
&lt;p&gt;Para ser exactos, cada vez que se ejecuta cualquier comando &lt;code&gt;jj&lt;/code&gt;, Jujutsu compara la copia de trabajo con el último estado del historial. Si hay diferencias, toma una instantánea y el change recibe una nueva revisión. Si usas una interfaz gráfica de Jujutsu, normalmente toma una instantánea automáticamente cada vez que consultas el historial en ella. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-no-desc"&gt;
&lt;p&gt;Eso sí: un change sin descripción no se puede enviar al remoto con push. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-agent-config"&gt;
&lt;p&gt;Consulta &lt;a href="https://juju-chu.com/es/agent-config" rel="noopener noreferrer"&gt;Haz que tu agente de programación use Jujutsu en vez de Git&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-gh-stack-jj"&gt;
&lt;p&gt;&lt;a href="https://docs.github.com/es/pull-requests/reference/use-other-tools-with-stacked-pull-requests" rel="noopener noreferrer"&gt;Uso de otras herramientas con solicitudes de incorporación de cambios apiladas - Documentación de GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-solve-pain"&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ulJ_Pw8qqsE" rel="noopener noreferrer"&gt;Solving Git’s Pain Points with Jujutsu (with Martin von Zweigbergk) - YouTube&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>jujutsu</category>
      <category>ai</category>
      <category>productivity</category>
      <category>spanish</category>
    </item>
    <item>
      <title>15 años de Git y luego Jujutsu: por qué ya no puedo volver</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Mon, 28 Sep 2026 00:37:00 +0000</pubDate>
      <link>https://dev.to/jujuchu-es/15-anos-de-git-y-luego-jujutsu-por-que-ya-no-puedo-volver-4jjm</link>
      <guid>https://dev.to/jujuchu-es/15-anos-de-git-y-luego-jujutsu-por-que-ya-no-puedo-volver-4jjm</guid>
      <description>&lt;h2&gt;
  
  
  2026: el primer VCS que elegí de verdad
&lt;/h2&gt;

&lt;p&gt;Mirando hacia atrás, nunca llegué a elegir un sistema de control de versiones (VCS). Usaba el que hubiera escogido la empresa en la que trabajaba. En la mayoría de mis trabajos anteriores se usaba Subversion en un servidor interno. Luego, en 2011, entré en una empresa que había adoptado GitHub, así que a todos los ingenieros se nos pedía usar Git. Fue entonces cuando empecé a usar Git y GitHub en serio.&lt;/p&gt;

&lt;p&gt;Viniendo de Subversion, Git me parecía poco intuitivo y difícil de usar. GitHub trajo además una nueva exigencia: dejar el historial limpio para que fuera fácil de revisar. Los comandos necesarios para ello eran incoherentes y difíciles de recordar, y cada uno venía con esa presión de saber que no te puedes permitir un error.&lt;/p&gt;

&lt;p&gt;Con el tiempo se me adormeció esa sensación y acepté que las cosas eran así. Aun así, seguía sin recordar los comandos. Cualquier cosa un poco complicada implicaba buscar en Google, y evitaba todo lo que pudiera provocar un conflicto. Así pasaron cinco años, luego diez. Justo cuando parecía que los quince pasarían igual, todo cambió. Llegaron los agentes de programación con IA como Claude Code y, casi sin darme cuenta, la IA ya escribía más código que las personas. Unos años antes no me lo habría creído.&lt;/p&gt;

&lt;p&gt;Dale instrucciones a una IA y escribirá el código en un abrir y cerrar de ojos. Con todo avanzando tan rápido, el tedioso ritual de add y commit de Git se convirtió en un verdadero cuello de botella. Si funcionaba, hacía commit de momento, aunque todavía no lo entendiera tan a fondo como el código que había escrito yo. Y luego, inevitablemente, quería cambiar cosas. Perdía cambios importantes en algún punto del infierno del rebase, o me rendía y apilaba commits de parche encima hasta dejar el historial hecho un desastre. Aquello se convirtió en el pan de cada día.&lt;/p&gt;

&lt;p&gt;Fue entonces cuando descubrí &lt;strong&gt;&lt;a href="https://www.jj-vcs.dev/" rel="noopener noreferrer"&gt;Jujutsu&lt;/a&gt;&lt;/strong&gt;. En Japón, hacia enero de 2026, circuló una oleada de artículos introductorios y la comunidad de desarrolladores en general empezó a prestarle atención. Después de leer unos cuantos, pensé que encajaría bien con la programación con IA y lo probé en un proyecto en el que estaba trabajando. Su filosofía de diseño y sus comandos son tan distintos de los de Git que al principio me costó mucho usarlo. Lo que evitó que tirara la toalla fue lo sencillo que resultaba todo sin área de staging, y la tranquilidad de saber que cualquier operación se podía deshacer. Al cabo de un mes, más o menos, ya lo manejaba razonablemente bien.&lt;/p&gt;

&lt;p&gt;Desde entonces gestiono todos mis repositorios con Jujutsu, y también escribo todo con él, desde entradas de blog y documentación hasta manuscritos de libros (este artículo incluido, por supuesto). Pensándolo bien, pasar de Git a Jujutsu fue la primera vez que elegí un VCS por mi cuenta. Y en algún momento me di cuenta de que ya no podía volver a Git. Estas son, a mi juicio, las razones por las que no tengo ningunas ganas de volver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Razón 1: nunca tengo que preguntarme si mi trabajo está guardado
&lt;/h2&gt;

&lt;p&gt;Git usa un modelo de tres estados: working tree → índice → repositorio local. Para registrar un cambio en el historial, primero lo pasas a staging con &lt;code&gt;git add&lt;/code&gt; y luego ejecutas &lt;code&gt;git commit&lt;/code&gt;. En Jujutsu, el estado de tu copia de trabajo (working copy) es en sí mismo un commit. Desde el punto de vista de Jujutsu, no hay ninguna diferencia entre tu directorio de trabajo y el commit actual. Eso trae varias ventajas prácticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nunca tienes que decidir cuándo guardar en el historial&lt;/li&gt;
&lt;li&gt;No necesitas nada parecido a &lt;code&gt;git stash&lt;/code&gt; al cambiar de tarea&lt;/li&gt;
&lt;li&gt;Es muy poco probable que pierdas el trabajo en curso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Llevar la cuenta de qué archivos no están en staging o todavía no han entrado en un commit es una carga cognitiva que no tiene nada que ver con el trabajo de desarrollo en sí. Lo mismo ocurre con guardar y recuperar stashes cuando algo imprevisto te interrumpe. Jujutsu reduce esos costos casi a cero.&lt;/p&gt;

&lt;p&gt;En la programación con IA, con &lt;a href="https://juju-chu.com/es/agent-config" rel="noopener noreferrer"&gt;la configuración adecuada&lt;/a&gt;, basta con pedirle a un agente «crea la funcionalidad X». El trabajo va quedando en un único commit a medida que avanza, y el agente lo remata con un mensaje como «feat: X». En el flujo normal, no tienes que ocuparte del historial en absoluto.&lt;/p&gt;

&lt;p&gt;Casi nunca te pasa el accidente en el que &lt;code&gt;git reset&lt;/code&gt;, &lt;code&gt;git clean&lt;/code&gt; o un comando de shell borra archivos que ya no puedes recuperar. A mí un agente de IA me ha borrado archivos que no pude recuperar, e incluso ahora, cuando se supone que los modelos son mucho mejores que antes, sigo viendo casos así de vez en cuando. Jujutsu hace commit de la copia de trabajo sobre la marcha&lt;sup&gt;1&lt;/sup&gt;, así que en la mayoría de los casos cualquier cosa borrada por error se puede recuperar del historial.&lt;/p&gt;

&lt;p&gt;Si me viera obligada a volver a Git, tendría que volver a pensar en guardar, y siempre estaría a un comando equivocado de perder el trabajo en curso. Solo de imaginarlo me agoto. &lt;strong&gt;Jujutsu reduce la carga cognitiva del control de versiones y me da tranquilidad.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Razón 2: experimentar sale mucho más barato
&lt;/h2&gt;

&lt;p&gt;Ahora que un agente de IA puede construir en un momento lo que le pida, hago mucho más ensayo y error: construir algo, quedármelo si está bien y tirarlo y volver a empezar si no. Hacer eso en Git se complica enseguida. Si experimentas en el working tree sin hacer commit, no tienes salida cuando descartas algo y luego decides que lo querías. Si quieres conservarlo en el historial, necesitas ramas, y crearlas, cambiar entre ellas, fusionarlas y eliminarlas requiere tanto trabajo que experimentar empieza a dar pereza.&lt;/p&gt;

&lt;p&gt;¿Y cómo lo resuelve Jujutsu? La unidad básica del historial en Jujutsu, más o menos equivalente a un commit de Git, es el &lt;strong&gt;change&lt;/strong&gt;. Cuando Jujutsu detecta modificaciones en la copia de trabajo, actualiza automáticamente el change actual y conserva también las versiones anteriores. Basta con experimentar dentro de un change. Crea uno nuevo con &lt;code&gt;jj new&lt;/code&gt; y prueba lo que quieras. Si te gusta el resultado, dale una descripción (más o menos, un mensaje de commit). Si no, descártalo con &lt;code&gt;jj abandon&lt;/code&gt;. Si más adelante lo quieres recuperar, &lt;code&gt;jj operation revert &amp;lt;operation ID&amp;gt;&lt;/code&gt; deshace esa operación&lt;sup&gt;2&lt;/sup&gt;, y si acabas de borrarlo, basta un &lt;code&gt;jj undo&lt;/code&gt; para traerlo de vuelta.&lt;/p&gt;

&lt;p&gt;Jujutsu también te permite ramificar el historial desde cualquier punto sin ponerle nombre a nada. Solo tienes que pasarle a &lt;code&gt;jj new&lt;/code&gt; el ID del change padre. Para comparar distintos enfoques de la misma tarea, crea varios de estos changes hermanos y muévete entre ellos con &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt;. Ponle una descripción al que quieras conservar y haz &lt;code&gt;jj abandon&lt;/code&gt; del resto. Eso es todo.&lt;/p&gt;

&lt;p&gt;Como el change, la unidad básica del historial de Jujutsu, sirve a la vez de espacio de pruebas, experimentar forma parte del flujo de trabajo normal. No hace falta ningún merge. Y como al empezar un experimento no sabes si saldrá bien, tampoco tienes que ponerle nombre de antemano.&lt;/p&gt;

&lt;p&gt;Si me viera obligada a volver a Git, sin duda me costaría más ponerme a experimentar. Ya me veo evitando crear la rama porque resulta tedioso, experimentando en el working tree, tirando algo, queriendo recuperarlo y arrepintiéndome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Razón 3: reescribir el historial es sencillo e intuitivo
&lt;/h2&gt;

&lt;p&gt;Cuando escribía el código yo misma, lo conocía al dedillo, así que mis commits eran sólidos y rara vez tenía que volver a ellos. Pero casi nadie lee cada línea que genera una IA y la entiende tan bien como su propio código antes de hacer commit. Así que ahora me encuentro queriendo cambiar commits que se suponían terminados mucho más a menudo que antes.&lt;/p&gt;

&lt;p&gt;Supón que quieres incorporar un cambio en &lt;code&gt;src/styles/global.css&lt;/code&gt; al commit de tres posiciones atrás. ¿Cómo se hace en Git y cómo en Jujutsu? Hay dos maneras de abordarlo: editar directamente el commit en cuestión, o hacer el cambio encima y fusionarlo (squash) con ese commit. Aquí compararé la primera.&lt;/p&gt;

&lt;p&gt;Empecemos por Git. No puedes hacerlo con cambios sin commit de por medio, así que, si los tienes, primero debes apartarlos con &lt;code&gt;git stash -u&lt;/code&gt;. Después:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; HEAD~4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;En el editor que se abre, cambia &lt;code&gt;pick&lt;/code&gt; por &lt;code&gt;edit&lt;/code&gt; en la línea del commit en cuestión y guarda.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- pick bbbbbbb Mensaje del commit B
&lt;/span&gt;&lt;span class="gi"&gt;+ edit bbbbbbb Mensaje del commit B
&lt;/span&gt;  pick ccccccc Mensaje del commit C
  pick ddddddd Mensaje del commit D
  pick eeeeeee Mensaje del commit E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tu working tree está ahora en el commit B. Edita &lt;code&gt;src/styles/global.css&lt;/code&gt; y haz commit.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add src/styles/global.css
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pero no has terminado. Los commits posteriores todavía tienen que volver a aplicarse encima de esa edición. Ejecuta &lt;code&gt;git rebase --continue&lt;/code&gt; y reza para que no haya conflictos. Si los hay, el rebase se detiene, y tienes que arreglar los archivos, hacer &lt;code&gt;git add&lt;/code&gt; y volver a ejecutar &lt;code&gt;git rebase --continue&lt;/code&gt;, tantas veces como haga falta. Si pierdes el hilo, &lt;code&gt;git rebase --abort&lt;/code&gt; te devuelve a la casilla de salida. Es agotador.&lt;/p&gt;

&lt;p&gt;Ahora lo mismo en Jujutsu. &lt;code&gt;jj edit @---&lt;/code&gt; mueve la copia de trabajo al change de tres posiciones atrás. Edita &lt;code&gt;src/styles/global.css&lt;/code&gt;. Jujutsu hace rebase automáticamente de los changes descendientes sobre él, así que, si no hay conflictos, has terminado. Incluso si surge un conflicto, el rebase automático termina sin detenerse. Basta con ir con &lt;code&gt;jj edit&lt;/code&gt; al change en conflicto y arreglarlo allí, y el rebase automático vuelve a ejecutarse.&lt;/p&gt;

&lt;p&gt;Que haya menos pasos es un buen extra, pero la gran ventaja es que resulta mucho más intuitivo. Vas al punto del historial que te interesa y editas los archivos. Jujutsu se encarga del rebase por su cuenta, así que apenas notas que está ocurriendo. En Git, por alguna razón, el rebase es el protagonista. Empiezas con &lt;code&gt;git rebase&lt;/code&gt; y terminas con &lt;code&gt;git rebase&lt;/code&gt;. Es contraintuitivo, y los pasos intermedios son tan complicados que nunca llegué a memorizarlos.&lt;/p&gt;

&lt;p&gt;Si me viera obligada a volver a Git, probablemente evitaría reescribir el historial siempre que pudiera, por lo complicado del proceso. Se irían acumulando commits de parche, o se colarían cambios sin relación en el primer commit que tuviera a mano, y mi historial sería mucho más difícil de leer.&lt;/p&gt;
&lt;h2&gt;
  
  
  Razón 4: veo el historial como un grafo, no solo como una línea temporal
&lt;/h2&gt;

&lt;p&gt;Empecemos comparando la salida del comando de log de cada herramienta. La primera es &lt;code&gt;git log&lt;/code&gt;; la segunda, &lt;code&gt;jj log&lt;/code&gt;. Por defecto, Jujutsu oculta la mayoría de los changes inmutables, así que pasé &lt;code&gt;-r ::&lt;/code&gt; para quitar esa limitación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fquua0x3hwzgu3mhpt2jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fquua0x3hwzgu3mhpt2jz.png" alt="Salida de git log" width="800" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3v8q1eooxrzyvsdgic1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3v8q1eooxrzyvsdgic1n.png" alt="Salida de jj log" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El log de Git muestra lo que ocurrió en tu rama actual, en orden y en línea recta, como la cronología de un libro de historia. El log de Jujutsu te da una vista panorámica de todo el historial, dibuja las ramificaciones con arte ASCII y concentra más información. De un vistazo captas muchísimo más.&lt;/p&gt;

&lt;p&gt;Lo que ocurre al moverte a un punto pasado del historial también es distinto. Ejecuta &lt;code&gt;git checkout &amp;lt;commit ID&amp;gt;&lt;/code&gt; en Git, y &lt;code&gt;git log&lt;/code&gt; deja de mostrar lo que hay después de ese punto. Ejecuta &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt; en Jujutsu, y el log se queda como estaba. Solo la marca &lt;code&gt;@&lt;/code&gt;, que representa el commit de la copia de trabajo, se mueve al nodo de ese change.&lt;/p&gt;

&lt;p&gt;Estas diferencias en el aspecto y el comportamiento del log dicen mucho de la filosofía de diseño de cada herramienta. En Git, en principio se espera que estés en alguna rama con nombre mientras trabajas, y siempre te empuja hacia la punta de esa única línea del historial. Quizá por eso el log por defecto no se molesta en mostrar dónde estás dentro del historial completo ni lo que ocurre fuera de esa línea&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Jujutsu no tiene nada que corresponda a las ramas con nombre de Git&lt;sup&gt;4&lt;/sup&gt;. Puedes moverte libremente a cualquier nodo editable del historial, esté en la línea que esté. Por eso un grafo del historial completo resulta tan útil.&lt;/p&gt;

&lt;p&gt;Reescribir el historial en Jujutsu es fácil, en buena parte, gracias a este log denso y legible. Es como trabajar con un programa de edición de video con una línea de tiempo multipista delante. En comparación, editar el historial en Git se siente como cortar película analógica con tijeras y volver a pegar los trozos.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log&lt;/code&gt; también puede dibujar un árbol en arte ASCII si le pasas &lt;code&gt;--graph&lt;/code&gt;, aunque no es tan legible como el de Jujutsu. Pero ver el grafo no te permite editar entre ramas de forma intuitiva y segura como en Jujutsu, así que, aunque volviera a Git, casi no lo usaría.&lt;/p&gt;
&lt;h2&gt;
  
  
  El lugar de Git hoy
&lt;/h2&gt;

&lt;p&gt;Hace más de seis meses que me pasé por completo a Jujutsu, pero en realidad no he dejado de usar Git. La capa de almacenamiento de Jujutsu admite distintos backends, y puede usar un repositorio Git como backend. Cuando inicializas un repositorio con Jujutsu, por defecto obtienes un colocated workspace, con &lt;code&gt;.git/&lt;/code&gt; y &lt;code&gt;.jj/&lt;/code&gt; uno al lado del otro en la raíz del proyecto. Sigo usando un repositorio Git; simplemente he dejado de usar la interfaz de Git para trabajar con él. El comando &lt;code&gt;git&lt;/code&gt; sigue funcionando si lo necesitas.&lt;/p&gt;

&lt;p&gt;Gracias a esa compatibilidad, nadie a tu alrededor sabrá que usas Jujutsu a menos que lo digas. En un equipo que use GitHub o GitLab, es perfectamente posible que alguien lleve todo este tiempo usando Jujutsu sin decir nada. En el día a día, casi las únicas veces que pienso en Git son cuando preparo un repositorio con &lt;code&gt;jj git init&lt;/code&gt; o &lt;code&gt;jj git clone&lt;/code&gt; y, a partir de ahí, cuando sincronizo con el remoto usando &lt;code&gt;jj git fetch&lt;/code&gt; y &lt;code&gt;jj git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Empecé a usar Git por GitHub, y me pasé a Jujutsu cuando me lancé de lleno a programar con IA. Ya no hay vuelta atrás. Después de tantos años acostumbrada a Git, algunas costumbres de Jujutsu me resultaron raras al principio. Pero si miras la historia del control de versiones, a menudo resulta que el raro era Git, y hoy Jujutsu me parece más natural en la mayoría de las situaciones.&lt;/p&gt;

&lt;p&gt;Aun así, Jujutsu sigue siendo minoritario, y me frustra que una herramienta tan buena no sea más conocida. El problema es que es compatible con Git, pero se basa en un modelo mental muy distinto. Si lo pruebas con mentalidad de Git, guiándote por una tabla de equivalencias entre comandos de Git y jj, apenas notarás las ventajas. Por eso escribí &lt;strong&gt;una guía de Jujutsu para principiantes pensada para que no te atasques&lt;/strong&gt; , centrada en ayudarte a adoptar ese nuevo modelo mental.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://juju-chu.com/es" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Fog%2Fes%2Fdefault.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://juju-chu.com/es" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Una guía práctica para adoptar Jujutsu (jj) junto a Claude Code y Codex: snapshots automáticos, operaciones que siempre se pueden deshacer y una reescritura del historial que es segura.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjuju-chu.com%2Ficons%2Ffavicon.ico" width="48" height="48"&gt;
          juju-chu.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Se titula &lt;em&gt;Juju-chu! —Comienza tu flujo de trabajo Jujutsu × IA con &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;. El libro tiene una portada de estilo novela ligera y un aspecto divertido, pero el contenido va en serio. Lleva paso a paso a quienes empiezan con Jujutsu hasta que pueden usarlo con confianza. Si este artículo despertó tu curiosidad por Jujutsu, échale un vistazo. En la página encontrarás una muestra que puedes leer directamente en tu navegador.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-save-timing"&gt;
&lt;p&gt;Para ser exactos, cada vez que se ejecuta cualquier comando &lt;code&gt;jj&lt;/code&gt;, Jujutsu comprueba si hay diferencias entre la copia de trabajo y el último estado del historial y, si las hay, hace commit. Los agentes de IA a los que se les indica usar Jujutsu suelen revisar su trabajo con &lt;code&gt;jj status&lt;/code&gt; o un comando similar en las pausas naturales de una tarea, y es en ese momento cuando se produce el commit. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-operation-id"&gt;
&lt;p&gt;Aparte del log normal, Jujutsu mantiene un registro de operaciones que recoge cada operación realizada sobre el repositorio. Cada entrada tiene un ID de operación, con el que puedes revertir esa operación o restaurar los archivos tal como estaban justo después de ella. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-git-log-opt"&gt;
&lt;p&gt;Me refiero al comportamiento por defecto. Con &lt;code&gt;--all&lt;/code&gt;, verás todas las ramas de tu repositorio local y los commits alcanzables desde ellas. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-bookmark-branch"&gt;
&lt;p&gt;Los bookmarks de Jujutsu se tratan como ramas al trabajar con Git, pero conceptualmente son otra cosa. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>spanish</category>
      <category>jujutsu</category>
      <category>jj</category>
      <category>git</category>
    </item>
  </channel>
</rss>
