git checkout コマンド情報まとめ
Gitの git checkout コマンドについて、基本的な使い方や便利なオプション、新しいコマンドとの違い、AI エージェントが実行した場合の危険性と自動実行許可の判断基準を紹介しています。
目次
git checkoutとは
git checkout は、Git管理下のプロジェクトにおいて、作業ブランチを切り替えたり、指定したファイルを過去のコミットや別のブランチの状態に戻したりするための多機能なコマンドです。
バージョン管理システムでの日々の開発作業から、誤った変更の取り消しまで、非常に幅広く使われます。
オプション「-b」「–」「-f」の意味
| オプション | 意味 |
|---|---|
-b | 新しいブランチを作成し、同時にそのブランチに切り替えます(例: git checkout -b new-branch)。 |
-- | 後ろに続く引数をブランチ名ではなく「ファイルパス」として解釈させ、ファイルの変更を取り消します。 |
-f, --force | 現在の作業ディレクトリに未コミットの変更があっても、強制的にブランチを切り替えます(変更は失われます)。 |
特に -- オプションは、ファイルパスとブランチ名が重複している場合に、Gitへ明確に指示を送るために重要な役割を果たします。
よく使う組み合わせ
既存のブランチに切り替える
git checkout main
作業するブランチを main ブランチに変更します。
切り替える前に、現在のブランチでの変更をコミットまたはスタッシュしておく必要があります。
新しいブランチを作成して切り替える
git checkout -b feature/login
現在のブランチを元にして feature/login という新しいブランチを作成し、即座にそのブランチに切り替えて開発を開始します。
特定のファイルの変更を取り消す
git checkout -- src/app.js
指定したファイル(src/app.js)の未コミットの変更をすべて破棄し、最後にコミットした時点の状態にまで戻します。
git checkout vs git switch / git restore の違い
git checkout は「ブランチ切り替え」と「ファイル復元」という全く異なる機能を持っていたため、Git 2.23以降では機能を分かりやすく分離した新コマンドが導入されました。
| 機能 | git checkout | 新コマンド(推奨) |
|---|---|---|
| ブランチの切り替え | git checkout <branch> | git switch <branch> |
| ファイルの変更取り消し | git checkout -- <file> | git restore <file> |
| 新ブランチ作成と移動 | git checkout -b <new-branch> | git switch -c <new-branch> |
古い環境や既存のドキュメントでは git checkout が依然として多く使われていますが、最新のGit環境では、意図しない誤操作を防ぐために git switch や git restore の使用が推奨されています。
ユースケース
新しい機能追加のための開発ブランチ作成
メインブランチ(mainやdevelop)から分岐して、バグ修正や新機能のコーディングを行うための専用作業スペースを確保します。
実験的なコード変更の全破棄
検証のためにコードを書き換えたものの、不要になったり正常に動かなくなったりした際、変更を一括でキャンセルして元の状態に戻します。
AIエージェントが実行しようとした場合
AIエージェントの目的
AIエージェントは主に次のような目的で git checkout を実行しようとすることがあります。
- 指示されたバグ修正や追加機能の実装を行うため、対応する作業ブランチへ切り替えるため
- コードの編集・リファクタリングに失敗した際、コミット前の状態に戻してやり直すため
危険性
git checkout 自体は一般的なバージョン管理の操作ですが、特に git checkout -- <file>(ファイルの変更取り消し)を実行する際は注意が必要です。
この操作は未コミットの変更を完全に上書きして破棄するため、エージェントが書きかけの大切なソースコードを誤って消去してしまい、元に戻せなくなる不可逆的な危険性があります。
自動実行の許可設定
このコマンドには未コミットの変更を永久に失わせる破壊的なオプション(-- や -f)が含まれているため、AIエージェントの自動実行(許可)設定はオフ(要承認)にすることを推奨します。
特に変更を取り消す際は、現在編集中のコードが完全に不要なものであるかを人間が必ず事前に確認する必要があります。