本文へスキップ

Git 2.56がhistory dropとdelete-mergedを追加

Git 2.56(ギット)はマージ以外のコミットを700件以上含み、2026年9月末の公開が見込まれます。コミットの削除とブランチ整理の新しいコマンドが入ります。

著者 Tech AI Wire Team

3 分で読めます

GitHub上のGit v2.56リリースノート。「UI, Workflows & Features」の節が開かれ、新しいfetch.followRemoteHEAD設定やgit repo infoのパス関連のキーが並んでいる。

数字で見る

non-merge commits in the 2.56 release
700+
version due at the end of September 2026
2.56

Git 2.56はリリース候補の段階にあり、2026年9月末の公開が見込まれています。LWN.netの報道によると、このリリースにはマージ以外のコミットが700件以上含まれます。その多くは土台の改修です。ただし少数の新しいコマンドは、対話的リベースに頼らずに何ができるかを変えます。

LWNは2.56を「堅実なリリース」と呼び、プロジェクトは「より重要な作業の多くを将来のために取っておいている」と書いています。その将来がGit 3.0です。

新しいコマンド

コマンドまたはオプション何をするか
git history drop指定したコミットを、その後のコミットを再適用してブランチから取り除く
git repo infoリポジトリのパスを絶対・相対の両方で出力する
git add --resolved競合を解消したマージ対象のパスだけをステージする
git branch --delete-merged追跡先のリモートブランチへ既にマージ済みのローカルブランチを削除する
git bisect --reset-when-foundbisectが目的のコミットを見つけたら元の状態へ戻す
git replay --linearize履歴を再適用しながらマージコミットを落とす
git refs参照の作成、削除、更新、名前変更を直接行う

history dropができること、できないこと

git history dropは、指定したコミットをブランチから取り除きます。その後に来たコミットをすべて再適用する仕組みです。これは今、対話的リベースで1行ずつ慎重に入力して行っている作業です。

前提として知っておくべき制限があります。Gitのリリースノートは、履歴にマージコミットが含まれる場合、このコマンドは依然として動作を拒否すると述べています。現実のブランチの多くはマージを含みます。つまりこのコマンドは、長く共有されるブランチよりも、直線的な機能ブランチに向いています。

git replay --linearizeは同じ領域に反対側から近づきます。再適用しながらマージコミットを落とし、絡まった履歴を一直線に均します。

気づく範囲の小さな変更

git add --resolvedは、マージ途中のよくある混乱を狙ったものです。競合の解消中には、2つのファイルを直しつつ、他の編集を作業ツリーに残していることがよくあります。新しいオプションは、競合を解消したパスだけをステージし、それ以外のローカル変更には手を触れません。

git branch --delete-mergedは、追跡先のブランチへ既にマージされたローカルブランチを片付けます。さらにGitは、そのブランチがbisectに使われている場合、より分かりやすいメッセージを表示します。

Gitプロジェクトのリリースノートには、より静かな修正もいくつか並びます。Gitはgit push origin/mainのようなコマンドの打ち間違いを検出するようになりました。新しいfetch.followRemoteHEAD設定は、fetchがリモートの既定ブランチをどう扱うかを制御します。ヘルプを求めたときの終了コードは129ではなく0になりました。これでスクリプトがヘルプ要求を失敗と読むことがなくなります。設定コマンドは衝突時に再試行し、2つのコマンドが同時に設定を書くときのロックエラーを減らします。

その下では、git cat-file --batchの出力整形が速くなり、git log --followが非線形な履歴をこれまでよりうまく扱います。

これは開発者にとって何を意味するか

本物のブランチで使う前に、コピーでgit history dropを試してください。マージコミットの制限が、そもそも自分の進め方に合うかどうかを決めます。変更したい範囲にgit log --mergesを実行し、何か出力されるならコマンドは拒否します。

習慣に組み込む価値があるのはgit branch --delete-mergedです。多くの開発者は古いローカルブランチを何十も溜め込み、何年も前にブログから写したシェルのパイプラインで片付けています。組み込みのオプションのほうが安全です。名前の一致ではなく、追跡先のリモートブランチを確認するからです。

終了コードの変更は、自分の道具を見直す理由になります。129をヘルプ要求の合図として扱っていたスクリプトは、これからは0を受け取ります。これは正しい挙動ですが、挙動の変更であり、大きな音を立てずに静かに壊れます。

ここにある変更は既存のリポジトリを壊しません。壊すほうは次のリリースにあります。Git 3.0は新しいリポジトリをSHA-256とreftableへ切り替え、Rustをビルドの必須依存にします。Git自身の互換性変更の文書は、3.0の日付を今も示していません。2.56は、その前の最後の静かな停車駅と考えてください。

出典

  1. Looking forward to Git 2.56 - and 3.0 - LWN.net
  2. Git 2.56 release notes - Git project

関連記事

Kubernetes 1.37のノードで、kubeletとkube-proxyのプロセスが非rootユーザーの所有として表示されているターミナル画面。
開発ツール

Kubernetes 1.37、rootlessモードがベータに昇格

Kubernetes 1.37でKubeletInUserNamespaceがベータになりました。kubelet、コンテナランタイム、CNIプラグイン、kube-proxyのすべてを非rootユーザーで動かせます。