git checkoutもgit switch/restoreも廃止されません
概要
Git 2.49.0 リリース時(2025年3月)に Upcoming breaking changes というドキュメントが追加されました。今後 Git 3.0 (リリース時期はまだ計画されていない)でデフォルトのハッシュアルゴリズムが "sha1" から "sha256" に変更されることなどが記載されています。
そのドキュメントの末尾に Superseded features that will not be deprecated というセクションがあり、git-checkout(1)、git-switch(1)、git-restore(1) の3つともが維持されると記載されていました("all three commands will stay")。
したがって、当面は
- git checkout は廃止されない
- git switch/restore は廃止されない
なので、ご自身の用途に合ったものを使い続ければよいと思います。
記載された経緯は以下とされています:
- https://lore.kernel.org/git/xmqqttjazwwa.fsf@gitster.g/
- https://lore.kernel.org/git/xmqqleeubork.fsf@gitster.g/
- https://lore.kernel.org/git/112b6568912a6de6672bf5592c3a718e@manjaro.org/
switch/restoreとは
Git 2.23.0 (2019年8月)で追加されたサブコマンドで、git checkout が担っていた機能を2つのコマンドに分ける形で git switch と git restore が導入されています。
checkout が「作業ツリー」と「作業ツリー内のファイル」を操作対象とする機能の両方を担っていたので、前者を switch へ、後者を restore へと分けてわかりやすくしようという意図でコマンドを分割したという認識です。
サブコマンド追加時のリリースノート では触れられていないのですが、この時点から今に至るまで switch/restore は実験的なコマンドの位置付けになっています(マニュアルのDESCRIPTIONに "THIS COMMAND IS EXPERIMENTAL." と書かれています)。
ちなみにEXPERIMENTALと記載されているサブコマンドは以下の通り(v2.50.0 で確認。知らないものもあったので後で見ておこう...)
% grep -l "THIS COMMAND IS EXPERIMENTAL" Documentation/git-*
Documentation/git-backfill.adoc
Documentation/git-for-each-repo.adoc
Documentation/git-replay.adoc
Documentation/git-restore.adoc
Documentation/git-sparse-checkout.adoc
Documentation/git-switch.adoc
(追記) その後 Git 2.51.0 (2025年8月) で switch と restore の experimental 扱いが外れました。
個人的には
私自身は checkout を使い続けています。
switch/restore が導入されたときに試しはしたのですが、操作対象での分解だけでなく、 switch では branch とそれ以外を意識して操作するという機能変更も入っており、個人的に多用していた git switch -
でひっかかることがあるのが理由の一つです。
一方で、git に慣れてない人に尋ねられたときは switch/restore がわかりやすいよって言うこともあります(上述の制約により detached HEAD での混乱を避けられることもあり)。
Discussion