ライフスタイル

Git 2.56リリース:コンフリクト解決をより安全に、共通祖先の探索を高速化、GitHubが主な変更点を解説

GitHubブログの2026年9月28日の記事によると、オープンソースのGitプロジェクトがGit 2.56.0をリリースした。解決済みのコンフリクトだけを登録するgit add --resolvedの追加、マージの起点となる共通祖先の探索の高速化などが含まれる。日常的にGitを使う開発者に加え、GitHubのようなリポジトリのホスティング事業者にも関わる変更だ。

読了目安 10 分

Git 2.56リリース:コンフリクト解決をより安全に、共通祖先の探索を高速化、GitHubが主な変更点を解説
画像:Mokaair (Original editorial artwork)

何が起きたのか

GitHubブログは2026年9月28日、Elijah Newren氏による記事を掲載し、オープンソースのGitプロジェクトがGit 2.56.0をリリースしたと伝えた。Gitはソースコードの変更履歴を管理するためのツールで、多くの開発者が日常的に使っている。GitHubによれば、このバージョンには104人を超える貢献者による機能追加とバグ修正が含まれ、うち39人が新規の貢献者だという。記事ではGitHubが特に注目に値すると考える変更が取り上げられており、主な内容は、より安全なコンフリクトのステージング方法、より高速なマージベース探索、そしてpath-walk repackをサーバー用途により適したものにする改善である。

3つの主要な変更点

Git 2.56リリース:コンフリクト解決をより安全に、共通祖先の探索を高速化、GitHubが主な変更点を解説
Mokaair 編集検証フロー · 画像:Mokaair (Original editorial artwork)
詳しい説明を読む

情報源を収集し、独立検証を行ってから Jev が判断します。

git add --resolved:解決済みのコンフリクトのみをステージ

2つの作業の流れをマージ(統合)する際、同じ箇所が別々に変更されていると「コンフリクト」が起き、Gitはファイル内に衝突箇所を示す「コンフリクトマーカー」という目印を書き込む。開発者はそれを手で直した後、そのファイルを「ステージ」する。ステージとは、変更を次のコミット(履歴への記録)に含めるよう登録することで、Gitの内部ではこの登録内容を「インデックス」と呼ぶ。GitHubの説明によると、この場面でよく使われるgit add -uは、変更されたすべての追跡対象パスを更新する。そのため、コンフリクトと無関係なローカルの変更まで一緒にステージしてしまったり、コンフリクトマーカーが残ったままのファイルをステージしてしまったりする恐れがある。Git 2.56で追加されたgit add --resolvedは、インデックス上で現在未マージのパスのみを対象とし、ステージ前にそれらのファイルにコンフリクトマーカーが残っていないかをスキャンする。マーカーが見つかった場合は、該当するパスを一覧表示し、インデックスは変更しない。

GitHubの記事に掲載されたgit add --resolvedの例 · shell
$ git add --resolved
fatal: the following paths still have conflict markers: recipe.txt
$ # Edit recipe.txt and remove the conflict markers.
$ git add --resolved
$ git status --short
 M notes.txt
M  recipe.txt

GitHubによれば、このモードはpathspec(対象とするファイルやフォルダの指定)で範囲を絞り込むことができるが、選択した範囲内ではすべてを通すか何も通さないかのチェックが行われる。解決済みの削除やバイナリのコンフリクトにはテキストのマーカーがないため、通常どおりステージできる。git add -uやgit add -Aとは同時に使用できず、一度もコンフリクトが発生していない追跡対象ファイルは無視される。

マージベース探索の早期打ち切り

マージ、3点diff、そしてホスティングサービスでのプルリクエストの比較では、いずれも2つのコミットの最適な共通祖先を見つける必要がある。この共通祖先を「マージベース」と呼び、マージではここを起点に双方の変更を組み合わせる。GitHubによると、従来の停止ルールでは、新たなマージベースが現れる可能性がなくなった後も、大量の古い履歴を処理し続けることがあった。Git 2.56では、キュー内でまだ片方からのみマークされているコミットの数を追跡し、どちらか一方が尽きた時点で探索を停止できるようになった。その場合でも、すべてのマージベースは返される。

path-walk repackがbitmapおよびdelta islandsと併用可能に

「repack」は、リポジトリ内のデータを詰め直して保存容量を減らす処理で、似たデータ同士を差分として保存する。GitHubによれば、path-walk repackはツリー内でのファイルの位置に沿ってオブジェクトを走査するため、より良い差分圧縮の関係を見つけられることが多い。これまでは、ホスティング事業者がよく使う2つの仕組みと互換性がなかった。オブジェクトの一覧を素早く求めるための索引であるreachability bitmapと、一部の参照に属するデータが、別のグループにしかないデータに依存しないようにするdelta islandsである。Git 2.56でこの2つの制限が取り除かれた。ただしGitHubは、新バージョンでもpath-walk repackはデフォルトで有効になっておらず、あくまで大規模リポジトリのホスティング事業者がストレージ削減効果を評価できるようになったにすぎないと強調している。

GitHubが公表したパフォーマンス数値の比較

数値はすべてGitHubブログの記事によるもの。monorepoは多数のプロジェクトを1つにまとめた大規模リポジトリを指す。実際の効果はリポジトリの構造によって異なる。
シナリオ変更前Git 2.56/新方式情報源の説明
実際のmonorepoにおけるマージベース走査0.68秒0.01秒GitHubが引用した単一の事例
Linuxカーネル git merge-base --all v4.8 v4.9167,441ステップ、0.29秒3,887ステップ、0.01秒デフォルトのv2 commit-graphを使用
2つの大規模monorepoでの本番評価—一方は多くのケースで約70倍高速、もう一方は平均約20倍高速GitHubが示した評価結果
Fluent UIリポジトリのrepackサイズ558.5 MB(通常のbitmap付きrepack)164.4 MB(--path-walk)約71%縮小、差分を強制再計算したベンチマーク

その他の注目すべき新コマンド

  • git history drop:GitHubによると、実験的なgit historyはGit 2.54でrewordとsplitが導入され、Git 2.55でfixupが追加され、Git 2.56ではさらにdropが加わった。選択したコミットを削除し、その子孫を親コミットの上に再適用するためのもので、再適用でコンフリクトが起きたりローカルの変更を上書きしたりする場合は中止される。また、マージコミットを含む履歴は扱えず、ルートコミットやマージコミットを削除することもできない。
  • git refsツール:Git 2.56では引き続き、ブランチなどの参照(ref)を扱う低レベルな管理機能をgit refsに集約しており、create、update、delete、renameが含まれる。GitHubは、git refs renameは参照とその変更記録(reflog)を移動するが、git branch -mが行うようなブランチ設定の調整は行わないと指摘している。
  • git branch --delete-merged:GitHubによれば、新バージョンにはupstreamですでにマージされたローカルのトピックブランチを一括で整理する方法が追加された。記事の例では、実際には削除せずに結果を確認する--dry-runオプションが付けられている。

一般ユーザーへの影響

日常的にGitを使う開発者にとって最も直接的な変化はgit add --resolvedである。マージ時にすでに無関係なローカルの変更がある場合でも安全策として機能し、未完了のコンフリクトや無関係な変更を誤って一緒にステージしてしまう可能性を減らせる。マージベース探索の改善は主に、履歴が膨大で古いブランチのマージが多いリポジトリに影響し、path-walk関連の変更は主にリポジトリのホスティング事業者に関わるものだ。開発者以外の人がこれらの変更に直接触れることは通常ないが、利用しているコードホスティングサービスが将来その恩恵を受ける可能性はある。アップグレードするかどうか、またいつ行うかは、チーム自身のツールチェーンや互換性の要件に応じて判断すべきである。

よくある質問

Git 2.56はいつリリースされたのですか?

GitHubブログは2026年9月28日に記事を公開し、オープンソースのGitプロジェクトがGit 2.56.0をリリースしたと伝えています。

git add --resolvedとgit add -uの違いは何ですか?

GitHubによると、git add -uは変更されたすべての追跡対象ファイルをステージします。一方、git add --resolvedは現在未マージのコンフリクトパスのみを対象とし、コンフリクトマーカーが残っていればどのファイルもステージしません。両者は同時に使用できません。

新バージョンでリポジトリは自動的に小さくなりますか?

いいえ。GitHubによれば、Git 2.56ではpath-walk repackはデフォルトで有効になっていません。bitmapおよびdelta islandsと互換性がないという制限を取り除き、ホスティング事業者が評価できるようにしただけです。

git history dropは本番のプロジェクトで安心して使えますか?

GitHubによると、git historyは依然として実験的なもので、マージコミットを含む履歴は扱えず、ルートコミットやマージコミットを削除することもできません。使用前に制限を理解しておくことをお勧めします。

これらのパフォーマンス数値は信頼できますか?

数値はすべてGitHubのブログ記事によるもので、同社が引用した個別の事例やベンチマークです。実際の効果はリポジトリによって異なります。

このトピックの最新ニュースを見る

最新の旅の情報・ガイド

出典

ライフスタイル