【Git】Git 3.0 完全ガイド2026 — SHA-256 デフォルト化と Reftable

ブランチグラフと歯車・盾のモチーフでハッシュ移行と参照ストレージを表したGit 3.0のアイキャッチ画像

Git 3.0で予定されるSHA-256デフォルト化、Reftableバックエンド、Rust必須化の変更点を整理し、今すぐ試せる準備コマンドを紹介します。参照ルックアップが51%高速になる計測値も確認できます。

Git 3.0は未リリース(最新リリースは Git 2.55.0。Git 3.0 は計画段階) Git 3.0 はまだリリースされていません。本記事で扱う SHA-256のデフォルト化・reftableのデフォルト化・Rust必須化は、Git公式の BreakingChanges ドキュメントに「Git 3.0で予定」として記載されている内容で、リリース日程は公表されていません。現在の git-init のデフォルトは sha1 のままです。 根拠: Git公式 BreakingChanges.adoc / git-scm.com

目次

この記事が解決する悩み

  • Git 3.0で何が変わるのか、先に把握しておきたい
  • 自分のリポジトリが壊れないか心配

対象読者: 日常的にGitを使う開発者
前提知識: ブランチ運用をした経験があること

結論

Git 3.0(2026年後半リリース予定)は、SHA-256デフォルト化・Reftableバックエンド・Rust必須化という3本柱のメジャーアップデートです。今すぐ試せる準備コマンドを先にどうぞ。

# Reftable形式でリポジトリ作成(参照のルックアップが高速)
git init --ref-format=reftable myproject

# SHA-256形式でリポジトリ作成(Git 2.51+で可能)
git init --object-format=sha256 myproject-sha256

# switch/restoreでcheckoutを置き換える習慣を
git switch -c feature/new-branch
git restore --staged main.go

上記のコマンドはすでに Git 2.48〜2.51 で利用可能です。3.0が来る前に、今のうちに新形式に触れておくとスムーズですね。

Git 3.0で変わる3つの大きなこと

Git 2.0がリリースされたのは2014年。それから11年以上、メジャーバージョンは据え置きでした。2026年後半に予定されているGit 3.0は、バージョン番号以上の意味を持つアップデートです。SHA-1からSHA-256への移行、参照ストレージのReftable化、Rust必須化という3つの変更が根幹に関わってきます。

それぞれの変更が実際の開発にどう影響するのか、今から何を準備すべきなのかを具体的に解説します。

SHA-256デフォルト化 — ついにSHA-1からの移行が始まる

なぜSHA-256が必要なのか

Gitは誕生以来、オブジェクトの識別子にSHA-1ハッシュを使ってきました。SHA-1は2017年のSHAttered攻撃で現実的な衝突攻撃が実証され、2020年のShambles攻撃でさらに深刻な脆弱性が明らかになりました。NISTがSHA-1を正式に非推奨としたのは2011年ですから、ずいぶん長い付き合いだったと言えますね。

Git 3.0では、git initで作成する新規リポジトリのデフォルトハッシュがSHA-256になります。

エコシステムの現状

SHA-256対応状況はプラットフォームによってばらつきがあります。

  • 対応済み: Git本体、Forgejo、Dulwich(Pythonライブラリ)
  • 実験的対応: GitLab、go-git、libgit2
  • 未対応: GitHub、Bitbucket

現時点でSHA-256リポジトリを作成してもGitHubにはプッシュできません。Git 3.0のリリースで各ホスティングサービスの対応が加速することが期待されています。SHA-1とSHA-256の相互運用モードも準備中なので、既存リポジトリが突然使えなくなることはありません。

SHA-256リポジトリの作り方

# SHA-256形式で初期化
git init --object-format=sha256 my-repo
cd my-repo
git rev-parse --show-object-format  # → "sha256" と表示されればOK

Reftable — 参照のルックアップが51%高速に

従来のfilesバックエンドの問題

Gitのブランチやタグ(参照)は、伝統的に1つの参照につき1つのファイルとしてディスクに保存されてきました(.git/refs/heads/ 以下)。この方式には以下の問題があります。

  • 大規模リポジトリで遅い: 数千の参照があると、ファイルシステムの走査に時間がかかる
  • 大文字小文字の衝突: Windows/macOSで feature/Login と feature/login が共存できない
  • アトミック性の欠如: 参照の更新がアトミックではなく、競合状態が発生しうる

Reftableがもたらす改善

Reftableはこれらをバイナリ形式で解決します。公式ドキュメント(git-scm.com の reftable 解説)に載っている計測値は次のとおりです。

  • 参照のルックアップ: 51%高速(11.2マイクロ秒 → 5.4マイクロ秒)
  • ファイルサイズ: 約3.2%増(28.3MB → 29.2MB)

数倍〜数十倍といった派手な数字ではありませんが、参照が多いリポジトリほど効いてきます。サイズが少し増える点は頭に入れておきましょう。

# Reftable形式でリポジトリ作成
git init --ref-format=reftable myproject
cd myproject
git rev-parse --show-ref-format  # → "reftable" と表示されればOK

# 既存リポジトリの参照形式を確認
git rev-parse --show-ref-format

Rust必須化 — メモリ安全性への投資

Git 3.0で最も話題になっているのが、Rustをビルド必須要件にする判断です。2005年からC言語で書かれてきたGitが、メモリ安全言語への移行を始めます。

なぜRustなのか

  • メモリ安全性: バッファオーバーフローやuse-after-freeといったC言語由来の問題を、コンパイル時に排除できる
  • モダンなツールチェーン: Cargoやclippyによる開発体験の向上
  • コントリビューションの敷居低下: メモリ管理に詳しくなくても安全なコードを書ける

まずMesonビルドシステムでRustモジュールのサポートを追加し、Git 3.0で必須化するという2段階計画です。Reftableバックエンドで先行してRust移植が試され、コードの保守性と信頼性で良い結果が出ています。主要プラットフォーム(Linux/macOS/Windows)ではRustツールチェーンは問題なく利用できるので、ほとんどの開発者には影響ありません。

破壊的変更と非推奨機能

Git 3.0ではいくつかのレガシー機能が削除されます。

  • git-whatchanged: git log --raw に置き換え。最近のバージョンでは --i-still-use-this フラグが必要
  • デフォルトブランチ名: master → main
  • SHA-1デフォルト: 新規リポジトリはSHA-256がデフォルトに
  • files参照バックエンド: 新規リポジトリはreftableがデフォルトに

git switch と git restore(Git 2.33で導入)は実験的ステータスを卒業し、git checkout に代わる標準コマンドとして推奨されます。

今すぐできる移行準備

以下の準備は今日から始められます。Git 3.0のリリースを待つ必要はありません。

1. Reftableを試す

mkdir test-reftable && cd test-reftable
git init --ref-format=reftable
git commit --allow-empty -m "first commit"
git switch -c feature/test
git switch main

2. SHA-256を試す

git init --object-format=sha256 test-sha256
cd test-sha256
echo "hello" > test.txt
git add test.txt
git commit -m "initial commit"
git log --oneline  # 64桁のハッシュになっていることを確認

3. switch/restoreを使い始める

# ブランチの作成と切り替え
git switch -c feature/new-feature

# ファイルの変更を取り消し
git restore main.go

# ステージングの解除
git restore --staged config.json

# 特定のコミットの状態に戻す
git restore --source=HEAD~2 src/app.ts

4. スクリプトやツールの確認

  • SHA-1の40桁ハッシュに依存している処理がないか確認(SHA-256は64桁)
  • git whatchanged を使っているスクリプトを git log --raw に置き換え
  • CI/CDパイプラインでGitをソースからビルドしている場合、Rustツールチェーンが必要になる可能性を考慮

まとめ

11年ぶりのメジャーバージョンアップとなるGit 3.0。セキュリティ・パフォーマンス・保守性のそれぞれで着実な進歩があります。

変更影響準備
SHA-256デフォルト化新規リポジトリのハッシュがSHA-256にgit init --object-format=sha256 で試す
Reftableバックエンド参照のルックアップが51%高速(公式ドキュメントの計測値)git init --ref-format=reftable で試す
Rust必須化ビルドにRustツールチェーンが必要に主要プラットフォームは影響なし
git-whatchanged削除git log --raw に移行スクリプトを更新
switch/restore標準化checkoutからの移行が推奨日常的に使い始める

既存のSHA-1リポジトリはGit 3.0でもそのまま動きます。一方でReftableの参照操作の改善やSHA-256のセキュリティ強化は、新しいプロジェクトから恩恵を受けられます。今のうちに試して、スムーズな移行に備えておきましょう。

検証環境

OS Windows 11 (build 10.0.26200)
CPU AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics
メモリ 28GB
言語/ツール git 2.51.2.windows.1
使用コマンド git init -q . && git rev-parse –show-object-format
測定日 2026-09-17

上記の環境で実際に実行して確認した結果です。環境が異なる場合は挙動が変わることがあります。

新規リポジトリの実際の既定値。ハッシュ形式は sha1 のままで、reftable も既定では有効になっていない
新規リポジトリの実際の既定値。ハッシュ形式は sha1 のままで、reftable も既定では有効になっていない

参考

本文の記述は以下の一次情報を確認して書いています。

あわせて読みたい

【広告】お名前.comならドメイン取得が格安。

【広告】このサイトはConoHa WINGで運営しています。安定した高速サーバーで快適にブログを書けています。いつもありがとう!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次