はじめに
GitHubは2026年4月20日、オープンソースのバージョン管理システム「Git」のバージョン2.54リリースに関するハイライト記事を公開しました。今回のリリースでは137名以上のコントリビューターが参加し、実験的な新コマンド git history の追加やConfig設定ベースのhook機能など、開発ワークフローに直結する改善が多数盛り込まれています。本稿では、Git 2.54(および2.53)の主要な変更点を解説します。
参考記事
- タイトル: Highlights from Git 2.54
- 著者: Taylor Blau
- 発行元: GitHub Blog
- 発行日: 2026年4月20日
- URL: https://github.blog/open-source/git/highlights-from-git-2-54/
要点
- 履歴書き換えに特化した実験的な新コマンド git history が追加された。reword(コミットメッセージの修正)と split(コミットの分割)の2操作をワーキングツリーに触れずに実行できる
- Git hookをConfig設定ファイル(~/.gitconfig や /etc/gitconfig など)に定義できるようになった。複数リポジトリへの共有や、同一イベントへの複数hook登録が可能になっている
- git maintenance run のデフォルト戦略が gc から geometric(幾何的リパッキング) に変更された。効率的なリポジトリメンテナンスがデフォルトで適用される
- git log -L が -S(pickaxe)などの差分オプションと組み合わせて利用できるようになった
- Git aliasの名前にUnicode文字(日本語など)が使えるよう拡張された
詳細解説
git history:シンプルな履歴書き換えに特化した新コマンド
Gitにはすでに git rebase -i という強力な履歴書き換えツールがありますが、「3コミット前のタイポを直したいだけ」という場面でも、to-doリストのセットアップやrebaseの完了まで手動で進める必要があり、複雑さが伴います。GitHubによれば、Git 2.54はこうした単純なケース向けに設計された実験的コマンド git history を新設しました。
現在サポートされる操作は2種類です。git history reword <commit> は指定コミットのメッセージをエディタで開いて書き換え、そのコミットを祖先とするブランチも自動的に更新します。git rebase と異なりワーキングツリーやインデックスに手を加えず、ベアリポジトリでも動作します。
git history split <commit> は、指定コミットを git add -p に似たインターフェースでhunk単位に選別し、2つのコミットに分割します。選んだhunkが新しい親コミットとして切り出され、残りのhunkは元のコミットに残ります。
ただし、マージコミットを含む履歴には対応せず、コンフリクトが発生する操作も実行を拒否します。git history は git rebase -i のような汎用的な書き換えではなく、ピンポイントな修正に絞った設計です。このコマンドは git replay のコアロジックを基盤としており、ワーキングツリーを変更しないという特性から、スクリプトや自動化用途にも向いていると考えられます。なお、まだ実験的な段階のためインターフェースが変わる可能性があります。
Config設定ベースのhook
これまでGitのhookは、各リポジトリの .git/hooks/ 以下に実行スクリプトを置く方式しかありませんでした。複数リポジトリで同じhookを共有したい場合、手動でスクリプトをコピーするか、core.hooksPath を使って全リポジトリが同一セットのhookを強制共有する方法しかなく、柔軟性に欠けていました。
Git 2.54では、hookをConfig設定ファイルで定義する新しい方法が追加されました。たとえば以下のように書くことで、ユーザーレベルの ~/.gitconfig や、システム全体の /etc/gitconfig、あるいはリポジトリローカルのConfigに定義を置くことができます。
[hook "linter"]
event = pre-commit
command = ~/bin/linter --cpp20同一イベントに複数のhookを登録することも可能で、hook.<name>.enabled = false を設定すると、スクリプト自体を削除しなくても個別に無効化できます。git hook list <event> で設定済みのhookと適用スコープを確認できます。従来の .git/hooks/ にあるスクリプトは引き続き動作し、最後に実行されるため既存の設定はそのまま有効です。
geometric戦略がメンテナンスのデフォルトに
Git 2.52で opt-in として導入された geometric(幾何的リパッキング)戦略が、Git 2.54では git maintenance run のデフォルト戦略になりました。GitHubの説明によれば、geometric戦略はリポジトリ内のpackfileがオブジェクト数で幾何級数的な構成をなすかを確認し、可能であれば段階的にpackを統合します。フルGCは、リポジトリ全体を単一packにまとめる場合にのみフォールバックとして使われます。
これにより、git maintenance run を戦略を指定せずに実行した場合、従来の重い gc タスクではなく、軽量なgeometric repacking が自動適用されます。commit-graphやreflogなどの補助データ構造も合わせて更新されます。すでに maintenance.strategy = geometric を設定していたユーザーへの変更はありません。従来の gc 戦略を使い続けたい場合は maintenance.strategy = gc を明示的に設定することで引き続き利用できます。
その他の主な改善点
git add -p では、J/K キーで移動する際に各hunkの承認・スキップ状況が表示されるようになりました。新しい –no-auto-advance フラグを使うと、ファイル内の全hunkを処理したあとに自動で次のファイルへ進まず、</> キーで手動制御できます。
git log -L(ファイル内の特定行範囲の履歴を追跡)は、これまで独自の出力パスを持っており、-S(pickaxe検索)や –word-diff などの差分オプションとの併用ができませんでした。今回の変更で標準の差分パイプラインに統合され、これらのオプションを組み合わせて使えるようになっています。
また、GitのaliasはこれまでASCIIの英数字とハイフンのみ使用可能でしたが、新しいサブセクション記法により日本語や特殊文字を含む名前が使えるようになりました。HTTPの 429 Too Many Requests レスポンスの自動リトライ対応、git blame への –diff-algorithm オプション追加、有効期限切れのGPGキーで作成された署名の正しい扱い(赤色表示から正常署名として表示)なども加わっています。
まとめ
Git 2.54は、git history による簡易的な履歴書き換えやConfig定義のhookなど、日常的な開発ワークフローを改善する機能が中心です。特にConfig設定ベースのhookは、チームや個人の環境管理に大きな変化をもたらす可能性があると思います。geometric repacking のデフォルト化も、特別な設定なしでリポジトリ管理が効率化される点で注目に値します。
