Jujutsu (コマンド名jj) は、Google所属の開発者によって開発された新しいバージョン管理システム (VCS) で、以下のような特徴があります。
- Git互換: 既存のGitリポジトリをそのまま扱え、Gitコマンドとの連携も可能
- シンプルで強力: Gitよりも直感的で効率的なブランチ操作、コンフリクト(競合)解決機能が特徴
- 効率的な履歴管理: 「コミットを巻き戻す」「コミットを統合する」といった操作が非常に簡単
対象読者
- jj の使い方の概要が知りたい
- git によるバージョン管理を行っている
- git の最低限の使い方と概念を知っている
- シェル(黒い画面)によるコマンド操作ができる
インストール方法
Windowsの場合
winget install jj-vcs.jj -h
UNIX 系 OS の場合
cargo install --locked --bin jj jj-cli
インストールの確認
jj --version
jj 0.36.0-70fd8f7697fbc20a9329a6e2f790ef86a8e284d1
初期設定
jj config set --user user.name "YOUR_GIT_USER_NAME"
jj config set --user user.email "YOUR_GIT_MAIL_ADDRESS"
jujutsu 特有の概念「チェンジ」と「ブックマーク」
「チェンジ」とは
jujutsu においてタスクを示す単位です。以下のような特徴があります。
- コミットの可変性: コミットの内容を修正しても、その「チェンジ」自体の ID(Change ID)は変わりません。そのためコミットの履歴を柔軟に書き換える(編集、分割、結合など)ことが容易になっています
- ID の永続性: Git ではコミット内容が変わるとコミットハッシュ(ID)も変わってしまいますが、jujutsu のチェンジ ID は変更後も永続するため、特定の変更を継続して追跡・参照できます
- ブランチレスワークフロー: jujutsu はデフォルトでブランチに依存しないワークフローを特徴としており、この「チェンジ」を連鎖させて履歴を管理します
これらの特徴によって、チェンジの中身を何度書き換えても「タスクのID」が変わらないため、Gitのようにリベースのたびにコミットを探し直す手間がありません。
「ブックマーク」とは
Gitでいうstashやtagの機能と、ブックマークの「印をつけて後で見返す」という概念を組み合わせたもので、jujutsu の強力な変更履歴管理をより便利に使うための「目印」です。
- stash不要: jujutsu では作業中の変更は常に管理されているため、stash のような一時的な保存操作を意識せずに、ブックマークで「後で戻る場所」をマーキングする感覚で使えます
簡易コマンドリファレンス
既存 git リポジトリで jj の開始
jj git init --colocate
git リポジトリを clone する
jj git clone <リポジトリURL>
編集中のチェンジにメッセージをつける
jj describe -m "CHANGE_MESSAGE"
別のチェンジに変更する
チェンジ名とメッセージをオプションとして指定できます。
jj new [<CHANGE_ID_PREFIX>] [-m "MESSAGE"]
リポジトリに対する操作を取り消す
jj undo
名前をつけて先頭のチェンジにブックマークを作成する
jj bookmark create BOOKMARK_NAME -r -@
リモートのブックマークを取り込む
jj bookmark track BOOKMARKNAME@origin
チェンジログのアスキーアートによる表示1
@は現在の作業中のチェンジを指します。
jj [log]
@ qpvvtrwt hidao@example.com 2025-01-01 12:00:00.000 +09:00 48820c78
│ (empty) CHANGE_MESSAGE
◉ zzyyxxww hidao@example.com 2024-12-31 10:00:00.000 aabbccdd
│ initial commit
コンフリクトの捜索・解決2
jj new <マージ元のチェンジID1> <マージ元のチェンジID2>
jj status
(衝突を解決)
jj describe -m "マージ完了の説明"
リポジトリをgit pushする
jj git push
リポジトリをgit fetchする
jj git fetch
謝辞
@gony さんの記事「バージョン管理システム Jujutsuを推す」から引用させていただいています。ありがとうございます!