はじめに
Gitは開発現場では欠かせないツールですが、「最近Gitって何か変わったの?」と聞かれると、意外と答えられない方も多いのではないでしょうか。
現在も最新バージョンは2系ですが、Gitでは将来的なメジャーバージョンも見据えた改善が継続的に進められています。
今回は、Git 3.0を見据えて注目されている変更点を紹介します。
Git 3.0とは?
現時点(2026年6月)ではGit 3.0は正式リリースされていません。
ただし、Gitのメーリングリストや開発コミュニティでは、将来的な3.0を見据えた改善が継続的に進められています。
そのため、今後のGitを理解する上では、現在進行中の変更点を把握しておく価値があります。
1. SHA-1からSHA-256への移行
最も大きな変更の一つが、オブジェクトハッシュの移行です。
これまでGitではSHA-1が利用されてきました。
commit
tree
blob
tag
これらすべてがSHA-1によって識別されています。
しかしSHA-1には衝突耐性の問題が指摘されており、現在はSHA-256への移行が進められています。
新規リポジトリでは以下のようにSHA-256形式で初期化できます。
git init --object-format=sha256
既存リポジトリはすぐに影響を受けるわけではありませんが、今後長期的にはSHA-256が主流になっていくと考えられます。
2. Reftableの導入
Gitではブランチやタグはrefsとして管理されています。
従来は以下のように、複数のファイルで管理されていました。
.git/refs/
packed-refs
新しく導入が進んでいるReftableは、高速性やファイル数削減、整合性向上を目的とした新しい管理方式です。
普段の開発では意識することは少ないですが、大規模リポジトリでは恩恵が期待されています。
3. Rustの採用
Gitは長年C言語で開発されてきました。
最近では一部の機能について、Rustで実装する取り組みも進められています。
主にメモリ安全性の向上や保守性の向上が目的とされています。
Gitが全面的にRustへ移行するわけではありませんが、必要な箇所へ徐々に取り入れる方針となっています。
4. checkoutからswitch・restoreへ
Git 2.23で追加された以下のコマンドですが、まだ利用していない方も多いと思います。
git switch
git restore
従来よく使われてきたgit checkoutは、ブランチ切り替えとファイル復元という2つの役割を持っていました。
現在は以下のように、役割が明確に分けられています。
git switch feature/xxxx
git restore MainActivity.kt
現在もgit checkoutは利用できますが、新しい用途ではswitchやrestoreを利用することが推奨されています。
Git 3.0だからといって大きく使い方が変わるわけではない
Git 3.0と聞くと、大きな破壊的変更を想像するかもしれません。
しかし実際には、セキュリティの向上や内部構造の改善、パフォーマンス改善といった、将来を見据えた改善が中心です。
普段多用する以下のような基本的な操作が突然変わるわけではありません。
- commit
- push
- pull
- merge
まとめ
Git 3.0はまだ正式リリースされていませんが、その準備は着実に進んでいます。
特に注目したいポイントは以下の4つです。
- SHA-256への移行
- Reftableの導入
- Rustの採用
- switch・restoreへの移行
普段何気なく使っているGitですが、内部では今も進化が続いています。
今後正式なGit 3.0がリリースされた際には、改めて変更点を追ってみたいと思います。
さいごに
最近は単発の記事が多かったので、そろそろシリーズ化できるようなテーマにもトライしたいなと思っています。