git スイート
git リポジトリの中では、ツリー自体がステータスを表示します: 変更ファイルは色付き、
gitignore 対象は暗転、コードプレビューには変更ガター。フル機能はキー1つ先です。
(git が必要。非リポジトリでは git 機能なしで普通に動きます。)
変更ハブ — o
Section titled “変更ハブ — o”ステージングの中心。未コミットファイルが1行ずつステータス付きで並びます:
s/uで選択ファイルを stage / unstage、S/Uで全ファイル。Enterでそのファイルの全画面 diff。cでコミット(メッセージはアプリ内で入力)、xでファイルの変更を破棄(確認付き)。lで log、gでコミットグラフ、bでブランチ一覧。yで選択ファイルのパスコピー。
ハブから・ツリーから(変更ファイル上の d)・フォローモードから:
sでレイアウト巡回: unified(縦)→ split(左右)→ auto。n/Nで diff を出ないまま次/前の変更ファイルの diff へ(タイトルに(2/5)の位置表示)。変更一式のレビューがファイルごとキー1つで進みます。xでそのファイルの変更をまるごと破棄(確認付き)。
log — l
Section titled “log — l”author/日付が右端の列に揃ったコミット一覧。Enter でコミット全体 — 完全な
コミットメッセージ(段落・空行を保持)とその diff が1つの文書としてスクロール
します。y でハッシュ / 件名 / 全文 / author / 日付をコピー。
コミットグラフ — g
Section titled “コミットグラフ — g”konoma は DAG を自前で描画します — git log --graph の斜め線ではなく角ばった
罫線、レーンごとの色、下端にブランチ凡例。
- コミット上の
sでそのブランチを基準に固定: first-parent の連鎖が レーン0の直線になり、他は右へ畳まれます — feature ブランチをmainに 対して読むのに最適。xで解除。 bでブランチ選択パネル(表示切替・J/Kで並べ替え)。同時描画はui.graph_max_branches(既定12)まで。ui.graph_base_branches = ["main", "develop"]で基準の慣例を事前設定。Enterでコミット詳細、yでコミット情報のコピー。
ブランチ — b
Section titled “ブランチ — b”ahead/behind 付きの一覧。Enter でチェックアウト、n で作成、d で削除
(確認付き)、/ で絞り込み。他のワークツリーがチェックアウト中のブランチもここに出ますが、
チェックアウトは失敗します — git は 1 つのブランチを同時に 1 つのワークツリーにしか置かず、
どこが使っているかを教えてくれます。
ワークツリー — w
Section titled “ワークツリー — w”リポジトリのワークツリーを、ブランチ・短縮ハッシュ・パスとともに一覧し、今いるものに印を付けます。
Enter でこのタブの root にし、Ctrl-t で別タブで開き、d で base ブランチからの差分
(コミット済みと未コミットの両方)を見ます。エージェントがコミットしてしまう場合になぜそれが効くかは
AI エージェントと使うを参照してください。
jj (Jujutsu) リポジトリ — プレビュー版
Section titled “jj (Jujutsu) リポジトリ — プレビュー版”プレビュー版です。 以下の機能は一通り揃っており、jj が作りうる全構成(colocated・非 colocated・
workspace)で jj 自身の出力と突き合わせて確認済みだが、長期の日常利用は経ていない。
jj workspace の一覧は未対応。また jj 自体が 1.0 前で月次の破壊的変更があるため、konoma は
バージョンを決め打ちせず起動時に一度 jj を試し、答えられなければ git に落ちる(他は何も変わらない)。
今まで動いていたリポジトリの見え方は変わらない。 既定では git が答えられる場所は git のままなので、
colocated(.git と .jj が並ぶ)は従来どおり。jj が答えるのは git のリポジトリが無い場所——
jj git init --no-colocate で作ったものと、すべての jj workspace ——だけ。colocated でも jj を使いたい
場合は [external] vcs = "jj" を設定する。
jj が答える場所では、このページの機能がそのまま使える(ツリーのマーカーと淡色化・diff・ 変更ファイル一覧・フォロー・ハブ)。
表示は jj のもので、git の見た目に jj のデータを流し込んだものではない:
- チップはブランチではなく作業コピーのコミットを名乗る(
@ owyqxpku side B)。 jj はブランチを追跡せず、colocated では git 側が detached なので「HEAD」は嘘になる。 - 新規ファイルは「未追跡」ではなく「追加」。jj に未追跡という状態が無いため。
- グラフは jj 自身の範囲と記号(
@作業コピー /○コミット /◆immutable /×conflict)。行の名前は change id(書き換えても変わらない名前)。aで全リビジョンに広がる。 他の workspace のチェックアウトはws-second@ラベル付きの通常コミットとして出る。 bは bookmark 一覧で、どれにも「現在」印を付けない。bookmark は HEAD のように 作業コピーを追いかけないため。!は[jj] tool(既定lazyjj)を起動する。
konoma は jj リポジトリを読むだけ。 全呼び出しに --ignore-working-copy が付くので、
作業コピーをスナップショットしない。これが無いと、status の取り直しがコミットを書いてしまい、
konoma はファイルが変わるたびに取り直すので際限がない。書き込み系のキーは提示しない。
書き込まない代わりに変更の追跡は konoma 自身が行うので、エージェントが 1 秒前に書いた
ファイルも、jj がまだ気づいていなくても表示される。唯一これで拾えないのは「更新時刻が
変わらないまま中身が変わった」ファイルで、ハブの R で jj に取り込ませて解消できる
(確認あり・[ui] confirm_jj_sync)。
未対応: jj workspace の一覧(w はその旨を表示)と、ステージング相当のもの
(jj に index は無く、jj split は後から選り分ける)。
外部ツール — !(変更ハブ内)
Section titled “外部ツール — !(変更ハブ内)”rebase や stash の手術など内蔵外の操作は、変更ハブ(o)内の ! で konoma をサスペンドして
設定済みツール(git.tool・既定 lazygit)を起動。終了すると元の場所に
戻ります。