コンテンツにスキップ

git スイート

git リポジトリの中では、ツリー自体がステータスを表示します: 変更ファイルは色付き、 gitignore 対象は暗転、コードプレビューには変更ガター。フル機能はキー1つ先です。 (git が必要。非リポジトリでは git 機能なしで普通に動きます。)

ステージングの中心。未コミットファイルが1行ずつステータス付きで並びます:

  • s / u で選択ファイルを stage / unstage、S / U で全ファイル。
  • Enter でそのファイルの全画面 diff
  • c でコミット(メッセージはアプリ内で入力)、x でファイルの変更を破棄(確認付き)。
  • l で log、g でコミットグラフ、b でブランチ一覧。
  • y で選択ファイルのパスコピー。

ハブから・ツリーから(変更ファイル上の d)・フォローモードから:

  • s でレイアウト巡回: unified(縦)→ split(左右)→ auto。
  • n / Ndiff を出ないまま次/前の変更ファイルの diff へ(タイトルに (2/5) の位置表示)。変更一式のレビューがファイルごとキー1つで進みます。
  • x でそのファイルの変更をまるごと破棄(確認付き)。

author/日付が右端の列に揃ったコミット一覧。Enter でコミット全体 — 完全な コミットメッセージ(段落・空行を保持)とその diff が1つの文書としてスクロール します。y でハッシュ / 件名 / 全文 / author / 日付をコピー。

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 でコミット情報のコピー。

ahead/behind 付きの一覧。Enter でチェックアウト、n で作成、d で削除 (確認付き)、/ で絞り込み。他のワークツリーがチェックアウト中のブランチもここに出ますが、 チェックアウトは失敗します — git は 1 つのブランチを同時に 1 つのワークツリーにしか置かず、 どこが使っているかを教えてくれます。

リポジトリのワークツリーを、ブランチ・短縮ハッシュ・パスとともに一覧し、今いるものに印を付けます。 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)を起動。終了すると元の場所に 戻ります。