mcpField
J
jj

jj

github.com/joshuadavidthomas開発6045 回インストール14 週間前に更新
リポジトリ

jj について

開発者やコーディングエージェント向けのJujutsu (jj) バージョン管理スキルです。変更可能な履歴、自動追跡、Git互換性、安全なコマンド運用、復旧方法を解説します。

主な機能

  1. 01変更可能なコミット履歴
  2. 02作業コピーの自動追跡
  3. 03Git連携の指針
  4. 04エージェント向け安全なコマンド規則
  5. 05操作ログからの復旧

活用シーン

  1. 01jjでコミットを作成・編集
  2. 02Git互換リポジトリでの作業
  3. 03自動化で対話型コマンドを避ける
  4. 04リポジトリ操作の取り消しや復元

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/joshuadavidthomas/agent-skills --skill jj

インストール後、Claude Code で/jjを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

config.md
git.md
history.md
README.md
revsets.md
sharing.md
workspaces.md
references/
bookmarks.md
command-gotchas.md
config-reference.md
conflicts.md
divergence.md
filesets.md
git-compatibility.md
git-experts.md
git-to-jj.md
github.md
parallel-agents.md
revsets.md
templates.md

詳細

Jujutsu(jj)バージョン管理

Jujutsu は、変更可能なコミット、自動変更追跡、すべての操作を取り消せる操作ログを備えた Git 互換の VCS です。

対象バージョン:jj 0.36+

トピック

必要なこと詳細
jj と Git の関係を理解する、または jj リポジトリで raw git を使うgit-compatibility.md
revset、fileset、またはテンプレート式を書くrevsets.md
push、pull、ブックマークの管理、または GitHub の操作bookmarks.md
分割、リベース、スカッシュ、または競合の解決conflicts.md
独立した作業コピーでエージェントを並行実行するparallel-agents.md
jj の設定、エイリアスの設定、または差分のカスタマイズconfig-reference.md

基本的な考え方

作業コピーはコミットです。 ステージング領域はありません。jj コマンドを実行すると、ファイルの変更はすべて @ に自動的にスナップショットされます。「ステージ → コミット」の代わりに、コードを書いて説明を付けるだけです。

変更 ID は安定しています。コミット ID は安定していません。 各コミットには 2 つの識別子があります。

  • 変更 ID — 書き換え後も安定しています。文字 k–z(例:tqpwlqmp)です。こちらを優先してください。
  • コミット ID — コンテンツハッシュで、書き換えるたびに変わります。16 進数です。コロケートされたリポジトリでは、Git のコミット ID です。

履歴は変更可能です。 コミットは自由に書き換えられます。子孫のコミットは自動的にリベースされます。古いバージョンは操作ログに残ります。

ブックマークはブランチではありません。 新しいコミットを作成しても、ブックマークは自動的に進みません。書き換えには追従しますが、push の前に明示的に設定する必要があります。 → 詳細:bookmarks.md

競合が作業を妨げることはありません。 jj では、競合したファイルを含むコミットを作成できます。都合のよいときに競合マーカーを直接編集して解決し、その後 jj st で確認してください。 → 詳細:conflicts.md

エージェントのルール

自動エージェントとして操作する場合、以下は必ず守ってください。

  1. メッセージには必ず -m を使ってください。 エディターを開くコマンドは実行しないでください。-m が必要なコマンド:jj new、jj describe、jj commit、jj squash。
  2. 対話型コマンドは使わないでください。 jj split(ファイルパスなし)、jj squash -i、jj resolve はすべて停止します。ファイルパス引数を使うか、jj restore のワークフローを使ってください。
  3. 変更後は確認してください。 squash、abandon、rebase、restore、または破壊的な操作の後には jj st を実行してください。
  4. コミット ID ではなく、変更 ID を使ってください。 変更 ID は書き換え後も維持されます。
  5. revset は引用符で囲んでください。 必ずシングルクォートを使います:jj log -r 'mine() & ::@'。
エージェント固有の設定
# agent-jj-config.toml
[user]
name = "Agent"
email = "[email protected]"

[ui]
editor = "TRIED_TO_RUN_AN_INTERACTIVE_EDITOR"
diff-formatter = ":git"
paginate = "never"

次のように起動します:JJ_CONFIG=/path/to/agent-jj-config.toml <agent-harness> → 詳細:config-reference.md

基本的なワークフロー

日々のサイクル:説明 → コードを書く → new → 繰り返す。

jj describe -m "feat: add user validation"
# make changes — auto-tracked, no `add` needed
jj st && jj diff
jj new -m "feat: add error handling"
履歴の整理
jj squash -m "feat: final clean message"   # fold working copy into parent
jj absorb                                   # auto-distribute hunks to right ancestor
jj abandon @                               # drop a failed experiment

→ 詳細:command-gotchas.md

非線形の作業

新しい作業が現在のチェーンに依存しない場合は、trunk から分岐します。

# Create sibling from trunk (doesn't move @)
jj new trunk() --no-edit -m "fix: correct timezone handling"
jj edit <bugfix-change-id>
# ... fix the bug ...

# Return to original work
jj log -r 'heads(trunk()..)'
jj edit <feature-change-id>

エージェントのルール: 新しいコミットを作成する前に、現在のチェーンに依存するかどうかを判断してください。依存しない場合は trunk から分岐し、分岐したことをユーザーに知らせてください。

変更の push
jj bookmark set feat -r @
jj git push -b feat

ブックマークは push の前に設定する必要があります。自動的には進みません。 → 詳細:bookmarks.md

主要なコマンド

タスクコマンド
状態を確認するjj st
差分/ログを表示するjj diff / jj log
現在のコミットを説明するjj describe -m "message"
新しい作業を開始するjj new -m "task description"
古いコミットを編集するjj edit <change-id>
親にスカッシュするjj squash
変更を自動で振り分けるjj absorb
コミットを破棄するjj abandon <change-id>
直前の操作を元に戻すjj undo
操作履歴を表示するjj op log
以前の状態に復元するjj op restore <op-id>
ブックマークを作成/移動するjj bookmark create <n> -r @ / jj bookmark set <n> -r @
プッシュ/フェッチするjj git push -b <bookmark> / jj git fetch

Git の翻訳については、Git から jj への対応表を参照してください。

復元

jj undo                      # undo last op; repeatable
jj op log                    # full operation history
jj op restore <op-id>        # jump to any past state
jj evolog -r <change-id>     # see how a change evolved

jj リポジトリの検出

.jj/ ディレクトリがあれば jj リポジトリです。.jj/ と .git/ の両方がある場合は、併置されたリポジトリです。常に jj コマンドを使用してください。併置されたリポジトリでは、Git の「detached HEAD」は通常の状態です。実際の状態を確認するには jj log を使用してください。

よくある間違い

間違い修正方法
コマンドで -m を省略する常に -m を指定してください。エディターがエージェントを停止させます
ファイルパスを指定せずに jj split を使用するパスを指定するか、jj restore ワークフローを使用してください
プッシュ前にブックマークを設定し忘れるまず jj bookmark set <name> -r @ を実行してください
変更 ID ではなくコミット ID を使用する変更 ID(k〜z の文字)は書き換え後も維持されます
revset 式を引用符で囲まない必ずシングルクォートで囲んでください:'mine() & ::@'
:: と .. 演算子を混同する:: = 祖先パス、.. = 範囲(revsets.md を参照)
ワークスペースをサブディレクトリとして作成する子ディレクトリではなく、兄弟ディレクトリにする必要があります

リファレンス一覧

Git 相互運用:

コマンド:

Revset とテンプレート:

共有:

履歴:

設定:

ワークスペース:

コメント