git history コマンドはもっと注目される価値がある
git の実験的機能である git history コマンドは、2026 年 4 月と 6 月にリリースされた git 2.54 および 2.55 で導入され、3 つのサブコマンドを備えている。著者は、ワークフロー全体の切り替えを必要とせず jj で求められる利点の多くを提供することから、より注目に値すると主張している。
git history コマンドは、git 2.54(4 月、reword および split サブコマンド)と git 2.55(6 月、fixup サブコマンド)の 2 つのリリースにまたがって導入された実験的なコマンドである。リリース日には注目を集めたが、その後のコミュニティでの議論はほとんどないと見られる。
3 つのサブコマンド
git history には以下の 3 つのサブコマンドが実装されている。
- fixup: ステージされた変更を対象コミットに畳み込み、そのコミットが含まれるすべてのブランチを自動的にリベースする。デフォルトではすべてのローカルブランチを検索するが、現在のブランチのみに限定するオプションがある。
- reword: 古いコミットのメッセージを更新し、その上にあるすべてをリベースする。
- split: 1 つのコミットを 2 つに分割し、ハンク単位のプロンプトを通じてインタラクティブに実行する。
アトミック性と安全性
3 つのサブコマンドに共通する最も重要な特性は、アトミック性である。すべてのコマンドは競合を生じさせる可能性のある操作を拒否することで、ツリーを半壊の状態に置き去りにすることはない。reword と split は純粋にコミットグラフで動作し、インデックスやワーキングツリーには決して触れない。
ただし git history はマージコミットの存在下では機能しない。ドキュメントには「この制限は設計上のものであり、履歴の書き換えはステートレス操作であることを意図している。制限は Git がファーストクラスの競合について学習した場合に解除できる」と述べられている。
jj との関係
著者は 1.5 年間にわたって約 3 ヶ月ごとに jj への切り替えを試みたが、git に戻る傾向にあるとしている。jj はしばしば並行 git ワークフローの問題の解決策として提案されるが、著者はその解決方法が自分には響かなかったとしている。
一方、「git history は jj の完全なギャップを埋めない。jj はまだオペレーションログと簡単な取り消し、ワーキングコピーをコミットとしてモデル化すること、およびリベース中に競合を伝達できることを提供し、これらはどれも実装を試みていない」と述べられている。
この記事は元記事の事実のみに基づいて自動生成されました。
筆者の見立て
- git history はワークフロー全体を切り替えることなく、人々が jj について喧伝する利点の多くをすでに提供していると論じている。
- git history は jj を魅力的にする多くのピースを採用する大きな前進であると評価している。
- 今後のリリースでさらなる改善がもたらされると予想している。
- マージコミットに対応できないという制限は将来変わる可能性があると示唆している。
出典
Lalit Maganti「The git history command deserves more attention」https://lalitm.com/post/git-history/