ガイド
checkout と switch の違い
Git 2.23 で登場した switch / restore と従来の checkout の使い分け
なぜ switch が生まれたのか
git checkout は「ブランチ切替」「ファイル復元」「新ブランチ作成」「特定コミットへの移動」など、まったく異なる操作を1つのコマンドで行っていました。
これは初心者にとって混乱の元であり、上級者でも意図しないファイル変更を起こすリスクがありました。
Git 2.23(2019年)で checkout の機能が switch と restore に分離されました。
ブランチ操作の比較
ブランチ関連の操作は checkout から switch に移行できます。
switch はブランチ操作に特化しているため、誤ってファイルを上書きする心配がありません。
| 操作 | checkout | switch |
|---|---|---|
| ブランチ切替 | git checkout feature | git switch feature |
| 新ブランチ作成+切替 | git checkout -b new | git switch -c new |
| detached HEAD | git checkout abc1234 | git switch --detach abc1234 |
| 直前のブランチに戻る | git checkout - | git switch - |
ファイル復元の比較
ファイルの復元操作は checkout から restore に移行できます。
restore は復元元(ステージ or コミット)と復元先(作業ツリー or ステージ)を明確に指定できるため、操作の意図がわかりやすくなっています。
| 操作 | checkout | restore |
|---|---|---|
| 作業ツリーの変更を破棄 | git checkout -- file | git restore file |
| ステージを取り消し | git checkout HEAD -- file | git restore --staged file |
| 特定コミットから復元 | git checkout abc1234 -- file | git restore --source abc1234 file |
どちらを使うべきか
これから Git を学ぶ人は switch と restore を使いましょう。
操作の意図が明確で、誤操作のリスクが低いです。
checkout は引き続き使えるため、既存のスクリプトや CI/CD パイプラインを急いで書き換える必要はありません。
チーム内で統一するのがベストです。
bash
# ブランチ操作は switch
git switch main
git switch -c feature/new
# ファイル復元は restore
git restore app.ts
git restore --staged app.ts
Git Ready