<?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: Yuka Ooka</title>
    <description>The latest articles on DEV Community by Yuka Ooka (@oukayuka).</description>
    <link>https://dev.to/oukayuka</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%2Fuser%2Fprofile_image%2F4027979%2F6006d3cd-50d1-4957-bd34-a43f812fc97c.png</url>
      <title>DEV Community: Yuka Ooka</title>
      <link>https://dev.to/oukayuka</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oukayuka"/>
    <language>en</language>
    <item>
      <title>15 Years of Git, Then Jujutsu: Why I Can’t Go Back</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Tue, 29 Sep 2026 00:29:00 +0000</pubDate>
      <link>https://dev.to/oukayuka/15-years-of-git-then-jujutsu-why-i-cant-go-back-2o6n</link>
      <guid>https://dev.to/oukayuka/15-years-of-git-then-jujutsu-why-i-cant-go-back-2o6n</guid>
      <description>&lt;h2&gt;
  
  
  2026: The First VCS I Actually Chose
&lt;/h2&gt;

&lt;p&gt;Looking back, I never really chose a version control system (VCS). I used whatever the company I worked for had picked. Most of my earlier workplaces ran Subversion on an in-house server. Then in 2011 I joined a company that had adopted GitHub, which meant every engineer was expected to use Git. That’s when I started using Git and GitHub for real.&lt;/p&gt;

&lt;p&gt;Coming from Subversion, Git felt unintuitive and hard to use. GitHub also brought a new expectation: clean up your history so it’s easy to review. The commands for doing that were inconsistent and hard to remember, and each one carried the kind of pressure where you can’t afford to slip.&lt;/p&gt;

&lt;p&gt;Over time I went numb to it and accepted that this was just how things were. I still couldn’t remember the commands, though. Anything slightly complicated meant a trip to Google, and I steered clear of anything that might cause a conflict. Five years went by that way, then ten. Just as it looked like fifteen would pass the same way, everything changed. AI coding agents like Claude Code arrived, and almost before I knew it, AI was writing more code than humans were. A few years earlier I wouldn’t have believed it.&lt;/p&gt;

&lt;p&gt;Give an AI instructions and it writes the code in no time. With everything moving that much faster, Git’s friction-heavy add-then-commit ritual became a real bottleneck. If it worked, I’d commit it for the time being, even if I didn’t yet understand it as thoroughly as code I’d written myself. Then, inevitably, I’d want to change things later. I’d lose important changes somewhere in rebase hell, or give up and pile quick-fix commits on top until the history was a mess. This became an everyday thing.&lt;/p&gt;

&lt;p&gt;That’s when I found Jujutsu. In Japan, a wave of introductory articles made the rounds around January 2026, and ordinary developers started to notice it. After reading a few, I figured it would pair well with AI coding and tried it on a project I was working on. Its design philosophy and commands are so different from Git’s that at first I struggled to use it. What kept me from giving up was how much simpler things felt without a staging area, and the comfort of knowing any operation could be undone. After about a month, I could use it reasonably well.&lt;/p&gt;

&lt;p&gt;Since then I’ve managed every repository with Jujutsu, and I do all my writing in it too, from blog posts and docs to book manuscripts (this post included, of course). Now that I think about it, moving from Git to Jujutsu was the first time I’d ever chosen a VCS myself. And somewhere along the way, I realized I couldn’t go back to Git. Here are the reasons, as I see them, that I have no desire to go back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 1: I Never Have to Wonder Whether My Work Is Saved
&lt;/h2&gt;

&lt;p&gt;Git uses a three-state model: working tree → index → local repository. To record a change in history, you first stage it with &lt;code&gt;git add&lt;/code&gt;, then run &lt;code&gt;git commit&lt;/code&gt;. In Jujutsu, the state of your working copy is itself a commit. From Jujutsu’s point of view, there’s no gap between your working directory and the current commit. Which comes with a few practical upsides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You never have to decide when to save to history&lt;/li&gt;
&lt;li&gt;You don’t need anything like &lt;code&gt;git stash&lt;/code&gt; when switching tasks&lt;/li&gt;
&lt;li&gt;You’re very unlikely to lose work in progress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping track of which files are unstaged or haven’t made it into a commit yet is cognitive overhead that has nothing to do with the actual development work. So is pushing and popping stashes when something unexpected interrupts you. Jujutsu brings those costs close to zero.&lt;/p&gt;

&lt;p&gt;For AI coding, with &lt;a href="https://juju-chu.com/agent-config" rel="noopener noreferrer"&gt;the right configuration&lt;/a&gt;, all you have to do is ask an agent to “build feature X.” The work lands in a single commit as it happens, and the agent finishes it off with a message like “feat: X”. In the normal flow, you don’t do any history bookkeeping at all.&lt;/p&gt;

&lt;p&gt;You also almost never hit the accident where &lt;code&gt;git reset&lt;/code&gt;, &lt;code&gt;git clean&lt;/code&gt;, or a shell command deletes files you can’t get back. I’ve had an AI agent delete files I couldn’t recover, and even now, when models are supposedly far better than they used to be, I still see reports of it now and then. Jujutsu commits the working copy as you go&lt;sup&gt;1&lt;/sup&gt;, so in most cases anything deleted by mistake can be recovered from history.&lt;/p&gt;

&lt;p&gt;If I were forced back to Git, I’d have to start thinking about saving again, and I’d always be one bad command away from losing work in progress. Just picturing it wears me out. &lt;strong&gt;Jujutsu lowers the cognitive load of version control and gives me peace of mind.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 2: Experimenting Is Far Cheaper
&lt;/h2&gt;

&lt;p&gt;Now that an AI agent can build whatever I ask for in moments, I do a lot more trial and error: build something, keep it if it’s good, throw it away and try again if it isn’t. Doing that in Git gets awkward fast. If you experiment in the working tree without committing, you’re stuck when you throw something away and then decide you wanted it after all. If you want it saved, you need branches, and creating, switching, merging and deleting them is enough of a chore that the whole thing suddenly feels heavy.&lt;/p&gt;

&lt;p&gt;So how does Jujutsu handle it? The basic unit of history in Jujutsu, roughly equivalent to a Git commit, is the &lt;strong&gt;change&lt;/strong&gt;. When Jujutsu detects edits in the working copy, it updates the current change automatically and keeps the earlier versions too. You just experiment inside a change. Create a new one with &lt;code&gt;jj new&lt;/code&gt; and try whatever you want. If you like the result, give it a description (roughly, a commit message). If you don’t, drop it with &lt;code&gt;jj abandon&lt;/code&gt;. If you later want it back, &lt;code&gt;jj operation revert &amp;lt;operation ID&amp;gt;&lt;/code&gt; undoes the deletion&lt;sup&gt;2&lt;/sup&gt;, and if you only just deleted it, a single &lt;code&gt;jj undo&lt;/code&gt; brings it back.&lt;/p&gt;

&lt;p&gt;Jujutsu also lets you branch off history at any point without naming anything. Just pass the parent change’s ID to &lt;code&gt;jj new&lt;/code&gt;. To compare different approaches to the same task, create several of these sibling changes and move between them with &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt;. Give the one you want to keep a description, and &lt;code&gt;jj abandon&lt;/code&gt; the rest. That’s it.&lt;/p&gt;

&lt;p&gt;Because the change, Jujutsu’s basic unit of history, doubles as a sandbox, experimenting is just part of normal workflow. No merge needed. And since you can’t tell whether an experiment will pan out when you start it, you don’t have to name it up front either.&lt;/p&gt;

&lt;p&gt;If I were forced back to Git, I’d definitely be more reluctant to experiment. I can already see myself skipping the branch because it’s a hassle, experimenting in the working tree, throwing something away, wanting it back, and kicking myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 3: Rewriting History Is Simple and Intuitive
&lt;/h2&gt;

&lt;p&gt;When I wrote the code myself, I knew it inside out, so my commits were solid and I rarely had to go back to them. But hardly anyone reads every line an AI generates and understands it as well as their own code before committing. So I find myself wanting to change supposedly finished commits far more often than I used to.&lt;/p&gt;

&lt;p&gt;Say you want to fold a change to &lt;code&gt;src/styles/global.css&lt;/code&gt; into the commit three back. What does that look like in Git, and in Jujutsu? There are two ways to go about it: edit the target commit directly, or make the change on top and squash it into the target commit. Here I’ll compare the first.&lt;/p&gt;

&lt;p&gt;Let’s start with Git. You can’t do this with uncommitted changes lying around, so if you have any, you first need to stash them with &lt;code&gt;git stash -u&lt;/code&gt;. Then:&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;In the editor that opens, change &lt;code&gt;pick&lt;/code&gt; to &lt;code&gt;edit&lt;/code&gt; on the target commit’s line and save.&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 Commit message for B
&lt;/span&gt;&lt;span class="gi"&gt;+ edit bbbbbbb Commit message for B
&lt;/span&gt;  pick ccccccc Commit message for C
  pick ddddddd Commit message for D
  pick eeeeeee Commit message for E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Your working tree is now at commit B. Edit &lt;code&gt;src/styles/global.css&lt;/code&gt;, then commit it.&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;But you’re not done. The commits after it still need to be replayed on top of that edit. Run &lt;code&gt;git rebase --continue&lt;/code&gt; and pray there’s no conflict. If there is, the rebase stops, and you fix the files, &lt;code&gt;git add&lt;/code&gt;, and &lt;code&gt;git rebase --continue&lt;/code&gt; again, as many times as it takes. If you lose track of what’s going on, &lt;code&gt;git rebase --abort&lt;/code&gt; sends you back to square one. It wears you out.&lt;/p&gt;

&lt;p&gt;Now the same thing in Jujutsu. &lt;code&gt;jj edit @---&lt;/code&gt; moves the working copy to the change three back. Edit &lt;code&gt;src/styles/global.css&lt;/code&gt;. Jujutsu automatically rebases the descendant changes onto it, so if there are no conflicts, you’re done. Even if a conflict comes up, the automatic rebase finishes without stopping. Just &lt;code&gt;jj edit&lt;/code&gt; your way to the conflicted change and fix it there, and the automatic rebase runs again.&lt;/p&gt;

&lt;p&gt;Fewer steps is a nice bonus, but the bigger win is that it feels far more intuitive. Go to the point in history you care about and edit the files. Jujutsu handles the rebasing on its own, so you barely notice it’s happening. In Git, for some reason, rebase is the star of the show. You start with &lt;code&gt;git rebase&lt;/code&gt; and you finish with &lt;code&gt;git rebase&lt;/code&gt;. It’s counterintuitive, and the steps in between are fiddly enough that I never did manage to memorize them.&lt;/p&gt;

&lt;p&gt;If I were forced back to Git, I’d probably avoid rewriting history whenever I could because of the hassle. Quick-fix commits would pile up, or unrelated changes would get stuffed into whatever commit was handy, and my history would get much harder to read.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reason 4: I See History as a Graph, Not Just a Timeline
&lt;/h2&gt;

&lt;p&gt;Let’s start by comparing the output of each tool’s log command. The first is &lt;code&gt;git log&lt;/code&gt;, the second &lt;code&gt;jj log&lt;/code&gt;. By default Jujutsu hides most immutable changes, so I passed &lt;code&gt;-r ::&lt;/code&gt; to lift that limit.&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="Output of 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="Output of jj log" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git’s log shows what happened on your current branch, in order, in a straight line like a timeline in a history textbook. Jujutsu’s log gives you a bird’s-eye view of the whole history, draws the branching with ASCII art, and packs in more information. You take in far more at a glance.&lt;/p&gt;

&lt;p&gt;What happens when you move to a past point in history is different too. Run &lt;code&gt;git checkout &amp;lt;commit ID&amp;gt;&lt;/code&gt; in Git, and &lt;code&gt;git log&lt;/code&gt; no longer shows anything after that point. Run &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt; in Jujutsu, and the log stays as it was. Only the &lt;code&gt;@&lt;/code&gt; marker, which stands for the working-copy commit, moves to that change’s node.&lt;/p&gt;

&lt;p&gt;These differences in how the log looks and behaves say a lot about the two tools’ design philosophies. In Git, you’re generally expected to be on some named branch while you work, and you’re always being pushed to the tip of that one line of history. That may be why the default log doesn’t bother showing where you are in the overall history or what’s happening outside that timeline&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Jujutsu has nothing that corresponds to Git’s named branches&lt;sup&gt;4&lt;/sup&gt;. You can move freely to any editable node in the history, regardless of which line it sits on. That’s why a graph of the overall history is so useful.&lt;/p&gt;

&lt;p&gt;A lot of what makes rewriting history easy in Jujutsu comes down to this dense, readable log. It’s like working in video editing software with a multi-track timeline in front of you. By comparison, editing history in Git feels like cutting analog film with scissors and gluing the pieces back together.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log&lt;/code&gt; can draw an ASCII tree graph too if you pass &lt;code&gt;--graph&lt;/code&gt;, though it’s not as readable as Jujutsu’s. But seeing the graph doesn’t let you edit across branches intuitively and safely the way Jujutsu does, so even if I went back to Git, I’d hardly ever use it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Git Fits In Now
&lt;/h2&gt;

&lt;p&gt;It’s been over six months since I switched to Jujutsu completely, but I haven’t actually stopped using Git. Jujutsu’s storage layer is pluggable, and it can use a Git repository as its backend. When you initialize a repository with Jujutsu, by default you get a colocated workspace, with &lt;code&gt;.git/&lt;/code&gt; and &lt;code&gt;.jj/&lt;/code&gt; sitting side by side in the project root. I’m still using a Git repository. I’ve just stopped using Git’s interface to it. The &lt;code&gt;git&lt;/code&gt; command still works if you want it.&lt;/p&gt;

&lt;p&gt;Because of that compatibility, nobody around you can tell you’re using Jujutsu unless you say so. On a team using GitHub or GitLab, it’s entirely possible someone has been quietly using Jujutsu all along. Day to day, about the only times I think about Git are when I set up a repository with &lt;code&gt;jj git init&lt;/code&gt; or &lt;code&gt;jj git clone&lt;/code&gt;, and after that when I sync with the remote using &lt;code&gt;jj git fetch&lt;/code&gt; and &lt;code&gt;jj git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I started using Git because of GitHub, and I switched to Jujutsu when I went all in on AI coding. Now there’s no going back. After years of being trained by Git, some of Jujutsu’s ways felt odd at first. But when you look at the history of version control, it often turns out Git was the odd one, and these days Jujutsu feels more natural to me in most situations.&lt;/p&gt;

&lt;p&gt;Jujutsu is still niche, though, and it frustrates me that a tool this good isn’t better known. The catch is that it’s compatible with Git but built on a very different mental model. If you try it with a Git mindset, working from a Git-to-jj command comparison, you’ll barely notice the benefits. So I wrote &lt;strong&gt;a beginner-friendly Jujutsu guide designed so you won’t get stuck&lt;/strong&gt; , one built around switching mental models.&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/" 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%2Fen%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/" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! — Starting Your Jujutsu × AI Workflow with jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A hands-on book on adopting Jujutsu (jj) with Claude Code and Codex: automatic snapshots, undoable operations, and safe history rewriting.
          &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;It’s called &lt;em&gt;Juju-chu! — Starting Your Jujutsu × AI Workflow with &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;, and with its light-novel-style cover it looks pretty playful, but the content is the real deal. It takes Jujutsu beginners step by step to the point where they can use it with confidence. If this post got you curious about Jujutsu, take a look. The page above has a sample you can read right in your browser.&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;To be precise, whenever any &lt;code&gt;jj&lt;/code&gt; command runs, Jujutsu checks for differences between the working copy and the latest state in history, and commits them if there are any. AI agents told to use Jujutsu typically check their work with &lt;code&gt;jj status&lt;/code&gt; or a similar command at natural breaks in a task, and that’s when the commit happens. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-operation-id"&gt;
&lt;p&gt;Separately from the regular log, Jujutsu keeps an operation log that records every operation performed on the repository. Each entry has an operation ID, which you can use to reverse that operation or restore the files as they were right after it. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-git-log-opt"&gt;
&lt;p&gt;This refers to the default behavior. With &lt;code&gt;--all&lt;/code&gt;, you’ll see every branch in your local repository and the commits reachable from them. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-bookmark-branch"&gt;
&lt;p&gt;Jujutsu’s bookmarks are treated as branches when working with Git, but conceptually they’re a different thing. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>jujutsu</category>
      <category>jj</category>
      <category>git</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í Jujutsu. 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>
    <item>
      <title>15 anos de Git e depois Jujutsu: por que não consigo mais voltar</title>
      <dc:creator>Yuka Ooka</dc:creator>
      <pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/jujuchu-pt/15-anos-de-git-e-depois-jujutsu-por-que-nao-consigo-mais-voltar-14pe</link>
      <guid>https://dev.to/jujuchu-pt/15-anos-de-git-e-depois-jujutsu-por-que-nao-consigo-mais-voltar-14pe</guid>
      <description>&lt;h2&gt;
  
  
  2026: o primeiro VCS que escolhi de verdade
&lt;/h2&gt;

&lt;p&gt;Olhando para trás, eu nunca cheguei a escolher um sistema de controle de versões (VCS). Usava o que a empresa onde eu trabalhava tivesse adotado. Na maioria dos meus empregos anteriores, usava-se Subversion em um servidor interno. Até que, em 2011, entrei em uma empresa que tinha adotado o GitHub, o que significava que todos os engenheiros precisavam usar Git. Foi aí que comecei a usar Git e GitHub para valer.&lt;/p&gt;

&lt;p&gt;Vindo do Subversion, o Git me parecia pouco intuitivo e difícil de usar. O GitHub também trouxe uma nova exigência: deixar o histórico limpo para facilitar a revisão. Os comandos para isso eram inconsistentes e difíceis de memorizar, e cada um vinha com aquela pressão de saber que não dava para errar.&lt;/p&gt;

&lt;p&gt;Com o tempo, aquela frustração foi amortecendo e eu aceitei que as coisas eram assim. Mesmo assim, continuava sem conseguir memorizar os comandos. Qualquer coisa um pouco mais complicada exigia uma busca no Google, e eu evitava tudo o que pudesse causar um conflito. Assim se passaram cinco anos, depois dez. Justo quando parecia que os quinze passariam do mesmo jeito, tudo mudou. Chegaram os agentes de IA para programação, como o Claude Code, e, quase sem eu perceber, a IA já escrevia mais código do que humanos. Alguns anos antes, eu não teria acreditado.&lt;/p&gt;

&lt;p&gt;Dê instruções a uma IA e ela escreve o código num piscar de olhos. Com tudo andando tão rápido, o ritual trabalhoso de fazer add e depois commit no Git virou um verdadeiro gargalo. Se funcionava, eu fazia o commit por enquanto, mesmo sem ainda entender o código tão a fundo quanto o que eu mesma tinha escrito. E depois, inevitavelmente, queria mudar coisas. Perdia alterações importantes em algum ponto do inferno do rebase, ou desistia e empilhava commits de remendo por cima até o histórico virar uma bagunça. Isso passou a fazer parte do dia a dia.&lt;/p&gt;

&lt;p&gt;Foi então que encontrei o Jujutsu. No Japão, por volta de janeiro de 2026, uma leva de artigos introdutórios circulou bastante, e a comunidade de desenvolvedores em geral começou a prestar atenção nele. Depois de ler alguns, achei que ele combinaria bem com a programação com IA e o experimentei em um projeto em que eu estava trabalhando. A filosofia de design e os comandos são tão diferentes dos do Git que, no começo, tive muita dificuldade para usá-lo. O que me impediu de desistir foi a simplicidade de trabalhar sem staging area e a tranquilidade de saber que qualquer operação podia ser desfeita. Depois de mais ou menos um mês, eu já conseguia usá-lo razoavelmente bem.&lt;/p&gt;

&lt;p&gt;Desde então, gerencio todos os meus repositórios com o Jujutsu, e também escrevo tudo com ele, de posts de blog e documentação a manuscritos de livros (este post incluído, claro). Pensando bem, trocar o Git pelo Jujutsu foi a primeira vez que escolhi um VCS por conta própria. E, em algum momento, percebi que não conseguia mais voltar ao Git. Estas são, na minha visão, as razões pelas quais não tenho a menor vontade de voltar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Razão 1: nunca preciso me perguntar se meu trabalho está salvo
&lt;/h2&gt;

&lt;p&gt;O Git usa um modelo de três estados: working tree → índice → repositório local. Para registrar uma alteração no histórico, primeiro você a coloca em staging com &lt;code&gt;git add&lt;/code&gt; e depois executa &lt;code&gt;git commit&lt;/code&gt;. No Jujutsu, o estado da sua cópia de trabalho (working copy) já é, em si, um commit. Do ponto de vista do Jujutsu, não existe diferença entre o seu diretório de trabalho e o commit atual. Isso traz algumas vantagens práticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você nunca precisa decidir quando salvar no histórico&lt;/li&gt;
&lt;li&gt;Você não precisa de nada parecido com &lt;code&gt;git stash&lt;/code&gt; ao trocar de tarefa&lt;/li&gt;
&lt;li&gt;É muito improvável que você perca trabalho em andamento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Controlar quais arquivos ainda não estão em staging ou ainda não entraram em um commit é uma carga cognitiva que não tem nada a ver com o trabalho de desenvolvimento em si. O mesmo vale para guardar e recuperar stashes quando algo inesperado interrompe você. O Jujutsu reduz esses custos a quase zero.&lt;/p&gt;

&lt;p&gt;Na programação com IA, com &lt;a href="https://juju-chu.com/pt/agent-config" rel="noopener noreferrer"&gt;a configuração certa&lt;/a&gt;, basta pedir a um agente “crie a funcionalidade X”. O trabalho vai sendo registrado em um único commit à medida que avança, e o agente o finaliza com uma mensagem como “feat: X”. No fluxo normal, você não precisa cuidar do histórico em nenhum momento.&lt;/p&gt;

&lt;p&gt;Você também quase nunca passa pela situação de ver &lt;code&gt;git reset&lt;/code&gt;, &lt;code&gt;git clean&lt;/code&gt; ou um comando do shell apagar arquivos que não dá mais para recuperar. Eu mesma já tive arquivos apagados por um agente de IA sem conseguir recuperá-los e, mesmo hoje, com modelos supostamente muito melhores do que antes, ainda vejo relatos assim de vez em quando. O Jujutsu faz commit da cópia de trabalho conforme você trabalha&lt;sup&gt;1&lt;/sup&gt;, então, na maioria dos casos, qualquer coisa apagada por engano pode ser recuperada do histórico.&lt;/p&gt;

&lt;p&gt;Se eu fosse obrigada a voltar ao Git, teria que voltar a pensar em salvar, e estaria sempre a um comando errado de perder o trabalho em andamento. Só de imaginar, já fico cansada. &lt;strong&gt;O Jujutsu reduz a carga cognitiva do controle de versões e me dá tranquilidade.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Razão 2: experimentar fica muito mais barato
&lt;/h2&gt;

&lt;p&gt;Agora que um agente de IA consegue construir em instantes o que eu pedir, faço muito mais tentativa e erro: construir algo, ficar com o resultado se estiver bom e jogar fora e recomeçar se não estiver. Fazer isso no Git logo fica complicado. Se você experimenta na working tree sem fazer commit, fica sem saída quando descarta algo e depois decide que queria aquilo. Se quiser guardar no histórico, precisa de branches, e criá-los, alternar entre eles, fazer merge e apagá-los dá tanto trabalho que experimentar começa a dar preguiça.&lt;/p&gt;

&lt;p&gt;E como o Jujutsu resolve isso? A unidade básica do histórico no Jujutsu, mais ou menos equivalente a um commit do Git, é o &lt;strong&gt;change&lt;/strong&gt;. Quando o Jujutsu detecta edições na cópia de trabalho, ele atualiza automaticamente o change atual e também guarda as versões anteriores. Basta experimentar dentro de um change. Crie um novo com &lt;code&gt;jj new&lt;/code&gt; e teste o que quiser. Se gostar do resultado, dê a ele uma descrição (mais ou menos, uma mensagem de commit). Se não gostar, descarte-o com &lt;code&gt;jj abandon&lt;/code&gt;. Se depois quiser recuperá-lo, &lt;code&gt;jj operation revert &amp;lt;operation ID&amp;gt;&lt;/code&gt; desfaz essa operação&lt;sup&gt;2&lt;/sup&gt; e, se você acabou de descartá-lo, um único &lt;code&gt;jj undo&lt;/code&gt; o traz de volta.&lt;/p&gt;

&lt;p&gt;O Jujutsu também permite criar ramificações a partir de qualquer ponto do histórico sem dar nome a nada. Basta passar o ID do change pai para &lt;code&gt;jj new&lt;/code&gt;. Para comparar abordagens diferentes para a mesma tarefa, crie vários desses changes irmãos e alterne entre eles com &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt;. Dê uma descrição ao que quiser manter e faça &lt;code&gt;jj abandon&lt;/code&gt; do resto. Só isso.&lt;/p&gt;

&lt;p&gt;Como o change, a unidade básica do histórico do Jujutsu, também serve de área de testes, experimentar passa a fazer parte do fluxo de trabalho normal. Não é preciso fazer merge. E como, ao começar um experimento, você não sabe se ele vai dar certo, também não precisa dar nome a ele de antemão.&lt;/p&gt;

&lt;p&gt;Se eu fosse obrigada a voltar ao Git, com certeza teria mais resistência a experimentar. Já me vejo deixando de criar o branch pelo trabalho que dá, experimentando na working tree, jogando algo fora, querendo recuperar e me arrependendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Razão 3: reescrever o histórico é simples e intuitivo
&lt;/h2&gt;

&lt;p&gt;Quando eu mesma escrevia o código, eu o conhecia de trás para a frente, então meus commits eram sólidos e raramente eu precisava voltar a eles. Mas quase ninguém lê cada linha que uma IA gera e a entende tão bem quanto o próprio código antes de fazer commit. Por isso, hoje me pego querendo alterar commits supostamente prontos com muito mais frequência do que antes.&lt;/p&gt;

&lt;p&gt;Suponha que você queira incluir uma alteração em &lt;code&gt;src/styles/global.css&lt;/code&gt; no commit de três posições atrás. Como isso fica no Git e no Jujutsu? Há duas formas de fazer isso: editar diretamente o commit em questão ou fazer a alteração por cima e incorporá-la (squash) a esse commit. Aqui vou comparar a primeira.&lt;/p&gt;

&lt;p&gt;Vamos começar pelo Git. Não dá para fazer isso com alterações sem commit no caminho, então, se houver alguma, primeiro você precisa guardá-las com &lt;code&gt;git stash -u&lt;/code&gt;. Depois:&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;No editor que se abre, troque &lt;code&gt;pick&lt;/code&gt; por &lt;code&gt;edit&lt;/code&gt; na linha do commit em questão e salve.&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 Mensagem do commit B
&lt;/span&gt;&lt;span class="gi"&gt;+ edit bbbbbbb Mensagem do commit B
&lt;/span&gt;  pick ccccccc Mensagem do commit C
  pick ddddddd Mensagem do commit D
  pick eeeeeee Mensagem do commit E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Agora sua working tree está no commit B. Edite &lt;code&gt;src/styles/global.css&lt;/code&gt; e faça o 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;Mas ainda não acabou. Os commits seguintes ainda precisam ser reaplicados sobre essa edição. Execute &lt;code&gt;git rebase --continue&lt;/code&gt; e reze para não haver conflito. Se houver, o rebase para, e você precisa corrigir os arquivos, fazer &lt;code&gt;git add&lt;/code&gt; e executar &lt;code&gt;git rebase --continue&lt;/code&gt; de novo, quantas vezes forem necessárias. Se você se perder no meio do caminho, &lt;code&gt;git rebase --abort&lt;/code&gt; leva você de volta à estaca zero. É cansativo.&lt;/p&gt;

&lt;p&gt;Agora, a mesma coisa no Jujutsu. &lt;code&gt;jj edit @---&lt;/code&gt; move a cópia de trabalho para o change de três posições atrás. Edite &lt;code&gt;src/styles/global.css&lt;/code&gt;. O Jujutsu faz automaticamente o rebase dos changes descendentes sobre ele, então, se não houver conflitos, pronto. Mesmo que surja um conflito, o rebase automático termina sem parar. Basta ir com &lt;code&gt;jj edit&lt;/code&gt; até o change em conflito e corrigi-lo ali, e o rebase automático é executado de novo.&lt;/p&gt;

&lt;p&gt;Ter menos passos é um bônus, mas a grande vantagem é que tudo fica muito mais intuitivo. Você vai até o ponto do histórico que interessa e edita os arquivos. O Jujutsu cuida do rebase por conta própria, então você mal percebe que ele está acontecendo. No Git, por algum motivo, o rebase é o protagonista. Você começa com &lt;code&gt;git rebase&lt;/code&gt; e termina com &lt;code&gt;git rebase&lt;/code&gt;. É contraintuitivo, e os passos intermediários são tão trabalhosos que nunca consegui memorizá-los.&lt;/p&gt;

&lt;p&gt;Se eu fosse obrigada a voltar ao Git, provavelmente evitaria reescrever o histórico sempre que pudesse, por causa do trabalho que dá. Commits de remendo se acumulariam, ou alterações sem relação acabariam enfiadas em qualquer commit que estivesse à mão, e meu histórico ficaria muito mais difícil de ler.&lt;/p&gt;
&lt;h2&gt;
  
  
  Razão 4: vejo o histórico como um grafo, não só como uma linha do tempo
&lt;/h2&gt;

&lt;p&gt;Vamos começar comparando a saída do comando de log de cada ferramenta. A primeira é do &lt;code&gt;git log&lt;/code&gt;; a segunda, do &lt;code&gt;jj log&lt;/code&gt;. Por padrão, o Jujutsu oculta a maioria dos changes imutáveis, então passei &lt;code&gt;-r ::&lt;/code&gt; para remover essa limitação.&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="Saída do 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="Saída do jj log" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O log do Git mostra o que aconteceu no seu branch atual, em ordem e em linha reta, como a cronologia de um livro de história. O log do Jujutsu oferece uma visão panorâmica de todo o histórico, desenha as ramificações com arte ASCII e concentra mais informação. Num relance, você absorve muito mais.&lt;/p&gt;

&lt;p&gt;O que acontece quando você vai para um ponto passado do histórico também é diferente. Execute &lt;code&gt;git checkout &amp;lt;commit ID&amp;gt;&lt;/code&gt; no Git, e o &lt;code&gt;git log&lt;/code&gt; deixa de mostrar o que vem depois desse ponto. Execute &lt;code&gt;jj edit &amp;lt;change ID&amp;gt;&lt;/code&gt; no Jujutsu, e o log continua como estava. Só a marca &lt;code&gt;@&lt;/code&gt;, que representa o commit da cópia de trabalho, se move para o nó desse change.&lt;/p&gt;

&lt;p&gt;Essas diferenças na aparência e no comportamento do log dizem muito sobre a filosofia de design de cada ferramenta. No Git, em princípio, espera-se que você esteja em algum branch com nome enquanto trabalha, e você está sempre sendo empurrado para a ponta dessa única linha do histórico. Talvez seja por isso que o log padrão nem se dá ao trabalho de mostrar onde você está no histórico como um todo nem o que acontece fora dessa linha&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;O Jujutsu não tem nada que corresponda aos branches com nome do Git&lt;sup&gt;4&lt;/sup&gt;. Você pode ir livremente para qualquer nó editável do histórico, esteja ele na linha que estiver. É por isso que um grafo do histórico completo é tão útil.&lt;/p&gt;

&lt;p&gt;Reescrever o histórico no Jujutsu é fácil, em boa parte, graças a esse log denso e legível. É como trabalhar em um programa de edição de vídeo com uma linha do tempo de várias trilhas à sua frente. Em comparação, editar o histórico no Git parece cortar filme analógico com tesoura e colar os pedaços de volta.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;git log&lt;/code&gt; também consegue desenhar uma árvore em arte ASCII se você passar &lt;code&gt;--graph&lt;/code&gt;, embora não seja tão legível quanto a do Jujutsu. Mas ver o grafo não permite editar entre branches de forma intuitiva e segura como no Jujutsu, então, mesmo que eu voltasse ao Git, quase não o usaria.&lt;/p&gt;
&lt;h2&gt;
  
  
  O lugar do Git hoje
&lt;/h2&gt;

&lt;p&gt;Já faz mais de seis meses que migrei totalmente para o Jujutsu, mas, na verdade, não parei de usar o Git. A camada de armazenamento do Jujutsu é plugável, e ele pode usar um repositório Git como backend. Quando você inicializa um repositório com o Jujutsu, por padrão obtém um colocated workspace, com &lt;code&gt;.git/&lt;/code&gt; e &lt;code&gt;.jj/&lt;/code&gt; lado a lado na raiz do projeto. Continuo usando um repositório Git; só deixei de usar a interface do Git para trabalhar com ele. O comando &lt;code&gt;git&lt;/code&gt; continua funcionando, se você precisar.&lt;/p&gt;

&lt;p&gt;Graças a essa compatibilidade, ninguém ao seu redor vai saber que você usa o Jujutsu, a menos que você conte. Em uma equipe que usa GitHub ou GitLab, é perfeitamente possível que alguém esteja usando o Jujutsu discretamente esse tempo todo. No dia a dia, praticamente as únicas vezes em que penso no Git são quando preparo um repositório com &lt;code&gt;jj git init&lt;/code&gt; ou &lt;code&gt;jj git clone&lt;/code&gt; e, a partir daí, quando sincronizo com o remoto usando &lt;code&gt;jj git fetch&lt;/code&gt; e &lt;code&gt;jj git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comecei a usar o Git por causa do GitHub e troquei pelo Jujutsu quando mergulhei de vez na programação com IA. Agora não tem mais volta. Depois de tantos anos acostumada ao Git, alguns jeitos do Jujutsu me pareceram estranhos no começo. Mas, olhando para a história do controle de versões, muitas vezes o estranho era o Git, e hoje o Jujutsu me parece mais natural na maioria das situações.&lt;/p&gt;

&lt;p&gt;Ainda assim, o Jujutsu continua sendo pouco conhecido, e me frustra que uma ferramenta tão boa não tenha mais visibilidade. O problema é que ele é compatível com o Git, mas se baseia em um modelo mental muito diferente. Se você o experimentar com a cabeça no Git, guiando-se por uma tabela de equivalência entre comandos do Git e do jj, mal vai notar as vantagens. Por isso escrevi &lt;strong&gt;um guia de Jujutsu para iniciantes pensado para você não travar no caminho&lt;/strong&gt; , centrado em ajudar você a adotar esse novo 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/pt" 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%2Fpt%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/pt" rel="noopener noreferrer" class="c-link"&gt;
            Juju-chu! — Comece seu fluxo de trabalho Jujutsu × IA com jj new
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Um guia prático para adotar Jujutsu (jj) com Claude Code e Codex: snapshots automáticos, operações que podem ser desfeitas e reescrita segura do histórico.
          &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;Ele se chama &lt;em&gt;Juju-chu! — Comece seu fluxo de trabalho Jujutsu × IA com &lt;code&gt;jj new&lt;/code&gt;&lt;/em&gt;. O livro tem uma capa no estilo light novel e um visual divertido, mas o conteúdo é sério. O livro orienta você passo a passo, desde os primeiros contatos com o Jujutsu até você conseguir usá-lo com confiança. Se este post despertou sua curiosidade pelo Jujutsu, dê uma olhada. Na página, você encontra uma amostra que pode ler diretamente no 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 exata, sempre que qualquer comando &lt;code&gt;jj&lt;/code&gt; é executado, o Jujutsu verifica se há diferenças entre a cópia de trabalho e o estado mais recente do histórico e, se houver, faz o commit. Agentes de IA instruídos a usar o Jujutsu costumam conferir o próprio trabalho com &lt;code&gt;jj status&lt;/code&gt; ou um comando parecido nas pausas naturais de uma tarefa, e é nesse momento que o commit acontece. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-operation-id"&gt;
&lt;p&gt;Além do log normal, o Jujutsu mantém um registro de operações com cada operação realizada no repositório. Cada entrada tem um ID de operação, que você pode usar para reverter essa operação ou restaurar os arquivos como estavam logo depois dela. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-git-log-opt"&gt;
&lt;p&gt;Refiro-me ao comportamento padrão. Com &lt;code&gt;--all&lt;/code&gt;, você vê todos os branches do seu repositório local e os commits alcançáveis a partir deles. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-bookmark-branch"&gt;
&lt;p&gt;Os bookmarks do Jujutsu são tratados como branches ao trabalhar com o Git, mas, conceitualmente, são outra coisa. ↩&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>braziliandevs</category>
      <category>ptbr</category>
      <category>jujutsu</category>
      <category>git</category>
    </item>
  </channel>
</rss>
