コンテンツにスキップ

Jujutsu (jj) - Git 互換バージョン管理 チートシート

Jujutsu (jj) - Git 互換バージョン管理 チートシート

Jujutsu (jj) は Git 互換 のモダンなバージョン管理システムです。Git リポジトリをバックエンドとして使用するため、既存のリポジトリに採用でき、Git を使用しているチームメイトと相互運用できます。そのモデルは異なっており、多くの人にとってよりシンプルです: ワーキング コピーがそれ自体のコミット (ステージング エリアは分離されていない)、競合がファースト クラス オブジェクト で、後で解決できます。すべての操作が記録され、操作ログ で取り消すことができます。デフォルトでは Git の意味でのブランチはありません。安定変更 ID で識別される変更を使用します。

インストール

プラットフォームコマンド
Cargocargo install --locked jj-cli
macOS (Homebrew)brew install jj
Arch Linuxsudo pacman -S jujutsu
Nixnix 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 -isquash する内容を対話的に選択
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 fetchGit リモートからフェッチ
jj git pushGit リモートにブックマークをプッシュ
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

リソース