オープンソースプロジェクトのGitは、104人を超える人々(うち39人は新規貢献者)の貢献を受け、2026年9月28日にバージョン2.56.0をリリースした。このリリースは、マージエラーのリスク低減と、大規模リポジトリやコードホスティングサービスが依存する処理の高速化に重点を置いている。
ほかの変更に触れずに競合を初期化
Git 2.56では、競合状態にあったファイルだけを処理するgit add --resolvedモードが追加された。git add -uのようなコマンドとは異なり、新しいモードは変更された追跡対象ファイルをすべて追加しようとしないため、マージ処理とは無関係なローカル変更が保護される。
初期化の前に、Gitはマージされていないテキストファイルを調べ、競合マーカーの残存を確認する。指定されたファイルのいずれかでマーカーが見つかった場合、処理の一部だけを初期化するのではなく、インデックスを変更せずに残す。pathspecを使って処理を限定することもできる。一方、削除やバイナリー競合はテキストマーカーを含まないため、通常どおり処理される。
マージベースの発見を高速化
このリリースでは、コミット間の最良共通祖先を検索するアルゴリズムが改善された。この処理は、マージ、3点間差分、プルリクエストの比較で使用される。Gitは、検索キュー内の一方の排他的な側が空になった時点で停止するようになった。その時点では、新しいマージベースが現れる可能性がないためである。
大規模な単一リポジトリのケースでは、この変更により処理時間が0.68秒から0.01秒に短縮された。また、2つの大規模リポジトリで行われた生産性評価では、一方で約70倍、もう一方で平均約20倍の改善が記録された。Linuxカーネルに関連するケースでは、git merge-base --all v4.8 v4.9の処理が167,441ステップ、0.29秒から、3,887ステップ、0.01秒に減少した。
ホスティングサービス向けの小規模な再パック
Git 2.56では、パスベースの再パックの利用を妨げていた2つの障壁が取り除かれた。これは、リポジトリツリー内で近接するファイルのオブジェクトをまとめ、圧縮効率を高める技術である。Fluent UIリポジトリの複製を使ったテストでは、従来の再パックで558.5メガバイトだったパックファイルのサイズが、--path-walkを使うことで164.4メガバイトに減少し、約71%の削減となった。
この方式は到達可能性マップおよび差分の島と互換性を持つようになった。これにより、ホスティングサービスは既存のサービス機構と分離機構を維持しながら、ストレージ削減効果を評価できる。ただし、デフォルトでは有効化されず、すべてのリポジトリに自動的に適用される変更でもない。
追加ツールと実用的な改善
- 実験的なgit history dropコマンドは、コミットを削除し、その後続コミットを再適用する機能を追加した。ただし、競合、ルートコミット、マージに関する制限は引き続き存在する。
- git refsコマンドは、参照の作成、更新、削除、名前変更の操作を統合し、古い値によるcompare-and-swap保護をサポートする。
- git branch --delete-mergedでは、追跡ブランチに基づいてマージ済みブランチを一括削除できる。プレビュー機能と、指定したブランチを保護する機能も備える。
- git bisect run --reset-when-foundは、障害の原因となったコミットを見つけた後に状態を自動的にリセットする機能を追加する。
- git repackコマンドでは、部分クローンで取得された大きなバイナリーオブジェクトを手動で破棄できる。必要になった場合には、信頼できるサーバーから取得できる状態が維持される。
- git log --followは、非線形履歴を通じたパスの名前変更の追跡を改善し、複数のルートを持つグラフの表示も改善する。
このリリースが重要な理由
Git 2.56の実用的な価値は、新しいコマンドだけにとどまらない。このリリースは、開発者やリポジトリ管理者の作業における直接的な摩擦点に対処している。git add --resolvedモードは意図しない変更を含める可能性を低減し、マージベースと再パックの改善は、大規模リポジトリにおける時間とストレージのコストを対象としている。ただし、一部のツール、特に履歴管理コマンドと部分クローンにおけるオブジェクトのクリーンアップは実験的または手動のままである。そのため、既存のワークフローに対する自動ポリシーや無条件の代替手段として扱うべきではない。
このリリースは、Gitプロジェクトがエンドユーザー向けのコマンドを追加するだけでなく、アルゴリズムと内部構造のレベルでも性能改善を続けていることを示している。リリースの詳細では、本番環境で実験的な機能を採用する前に、残りの変更を確認するため、Git 2.56の完全なリリースノートを参照することが推奨されている。