Jujutsu (jj) - Git 互換バージョン管理 チートシート
Jujutsu (jj) は Git 互換 のモダンなバージョン管理システムです。Git リポジトリをバックエンドとして使用するため、既存のリポジトリに採用でき、Git を使用しているチームメイトと相互運用できます。そのモデルは異なっており、多くの人にとってよりシンプルです: ワーキング コピーがそれ自体のコミット (ステージング エリアは分離されていない)、競合がファースト クラス オブジェクト で、後で解決できます。すべての操作が記録され、操作ログ で取り消すことができます。デフォルトでは Git の意味でのブランチはありません。安定変更 ID で識別される変更を使用します。
インストール
| プラットフォーム | コマンド |
|---|
| Cargo | cargo install --locked jj-cli |
| macOS (Homebrew) | brew install jj |
| Arch Linux | sudo pacman -S jujutsu |
| Nix | nix profile install nixpkgs#jujutsu |
| Windows (Scoop) | scoop install jujutsu |
| 確認 | jj --version |
セットアップ
| コマンド | 説明 |
|---|
jj config set --user user.name "Your Name" | 名前を設定 |
jj config set --user user.email "you@example.com" | メール アドレスを設定 |
jj git init --colocate | 既存の Git リポジトリで jj を初期化 (.git を保持) |
jj git clone <url> | jj で Git リポジトリをクローン |
jj git init | 新しい jj リポジトリを作成 (ネイティブ バックエンド) |
コア概念
| 用語 | 意味 |
|---|
| 変更 | 安定変更 ID を持つ論理的変更 (書き直しに耐える) |
| コミット | スナップショット。ワーキング コピーは常にコミット (@) です |
@ | 現在のワーキング コピー コミット |
| Revset | コミット選択用のクエリ言語 |
| 操作ログ | リポジトリ操作の履歴、各操作は取り消し可能 |
| ブックマーク | 名前付きポインター (push 時に Git ブランチにマップ) |
日常のワークフロー
| コマンド | 説明 |
|---|
jj status | ワーキング コピー変更を表示 |
jj log | コミット グラフを表示 |
jj diff | ワーキング コピー コミットの差分 |
jj describe -m "msg" | 現在のコミットのメッセージを設定/置き換え |
jj new | 現在のコミットの上に新しい変更を開始 |
jj new <rev> | 特定のコミットの上に新しい変更を開始 |
jj edit <rev> | 既存のコミットをワーキング コピーにする |
jj commit -m "msg" | @ を説明して、新しい変更を開始 (Git のような) |
履歴の移動および 編集
| コマンド | 説明 |
|---|
jj squash | @ からその親への変更を移動 |
jj squash -i | squash する内容を対話的に選択 |
jj split | 現在のコミットを 2 つに分割 |
jj rebase -d <dest> | 変更をターゲットに rebase |
jj abandon <rev> | コミットを削除 |
jj duplicate <rev> | コミットを他の場所にコピー |
キラー機能: 取り消し
| コマンド | 説明 |
|---|
jj op log | 実行されたすべての操作を一覧表示 |
jj undo | 最後の操作を取り消し |
jj op restore <id> | リポジトリを前の操作状態に復元 |
すべてのコマンドが操作であるため、ほぼすべてのもの (rebase や abandon を含む) を取り消すことができます。
ブックマークおよび Git 相互運用
| コマンド | 説明 |
|---|
jj bookmark create main -r @ | ブックマークを作成 (≈ Git ブランチ) |
jj bookmark set main -r @ | ブックマークをコミットに移動 |
jj git fetch | Git リモートからフェッチ |
jj git push | Git リモートにブックマークをプッシュ |
jj git push -c @ | 現在の変更からリモート ブランチを作成 |
Revsets (コミット選択)
| Revset | 選択対象 |
|---|
@ | ワーキング コピー コミット |
@- | ワーキング コピーの親 |
main | ブックマークが指すコミット |
mine() | あなたのコミット |
ancestors(@) | @ のすべての祖先 |
jj log -r "description(glob:'fix*')" | メッセージがマッチするコミット |
一般的なワークフロー
# 既存の Git リポジトリで jj を採用、Git リモートで作業を続行
jj git init --colocate
jj log
# ステージングなしで変更を行う — ファイルを編集して、説明
# (ファイルは自動的に @ に スナップショット)
jj describe -m "Add feature"
jj new # 次の変更を開始
# おっと — 最後に実行したことを取り消し (even a rebase)
jj undo
# 現在の変更をレビュー用のブランチとしてプッシュ
jj bookmark create feature -r @
jj git push -c @
jj vs Git
| 側面 | Jujutsu (jj) | Git |
|---|
| ステージング エリア | なし (ワーキング コピーがコミット) | インデックス/ステージング |
| 競合 | ファースト クラス、コミット可能 | 続行する前に解決が必須 |
| 取り消し | 操作ログを介した汎用 | Reflog (部分的) |
| ブランチ | ブックマーク (オプション) | ブランチ (中央) |
| バックエンド | Git 互換 | Git |
リソース