git checkout – ブランチやコミットを切り替えるコマンド

コマンドリファレンス

git checkout コマンドは、ブランチ・コミット・タグの切り替えや、ファイルを特定時点の状態に戻すために使う、Git の中心的なコマンドです。
Git 2.23 以降では一部の役割が git switch / git restore に分離されましたが、git checkout は引き続き広く使われており、旧来の環境との互換性も高いため実務でも頻繁に登場します。

目次

構文(Syntax)

git checkout [オプション] <ブランチ名>
git checkout [オプション] <コミットID> [--] <ファイル>
git checkout <タグ名>

主なオプション一覧

オプション説明使用例
<ブランチ名>指定ブランチに切り替えgit checkout develop
-b <新ブランチ名>新しいブランチを作成して切り替えgit checkout -b feature-x
-B <ブランチ名>ブランチが存在する場合は強制リセットして切り替えgit checkout -B hotfix
<コミットID>特定のコミットに切り替え(detached HEAD 状態)git checkout abc1234
<タグ名>タグが指すコミットに切り替え(detached HEAD 状態)git checkout v1.0.0
<コミットID> -- <ファイル>ファイルを特定コミット時の状態に戻すgit checkout abc1234 -- app.py
-- <ファイル>変更を破棄して最新コミットの状態に戻すgit checkout -- README.md
-t / --trackリモートブランチをトラッキングしてローカルに作成git checkout -t origin/feature-x

実行例

既存のブランチに切り替え

git checkout develop

出力例:

Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.

未コミットの変更がある場合はエラーになることがあります。その場合は先に git stash で変更を退避してから切り替えてください。

新しいブランチを作成して切り替え

git checkout -b feature-login

出力例:

Switched to a new branch 'feature-login'

特定のブランチやコミットを起点にして新ブランチを作ることもできます。

# main ブランチを起点に新しいブランチを作成
git checkout -b hotfix/bug-123 main

リモートブランチをローカルに持ってくる

チームメンバーが作成したリモートブランチをローカルで作業する場合、まず git fetch でリモートの情報を取得してから切り替えます。

# リモートの最新情報を取得
git fetch origin

# リモートブランチをローカルに作成して切り替え
git checkout -b feature-api origin/feature-api

短縮形として以下も使えます(ブランチ名がリモートと同名の場合に自動トラッキング)。

git checkout feature-api

出力例:

Branch 'feature-api' set up to track remote branch 'feature-api' from 'origin'.
Switched to a new branch 'feature-api'

タグをチェックアウトする

リリースバージョンの確認や過去バージョンへの調査目的で、特定タグのコードを見たいときに使います。

git checkout v1.2.0

出力例:

Note: switching to 'v1.2.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

タグのコードを編集して保存したい場合は、detached HEAD のまま作業せず、新しいブランチを作成してから作業してください。

# タグから新しいブランチを作成して作業
git checkout -b fix/v1.2.0-patch v1.2.0

過去のコミットに切り替え(detached HEAD)

git checkout abc1234

出力例:

Note: switching to 'abc1234'.

You are in 'detached HEAD' state...

detached HEAD 状態とは、ブランチの先頭ではなくコミット単体を参照している状態です。この状態で新しいコミットをしても、ブランチに結びついていないため git checkout でブランチに戻ると孤立します。調査目的以外では、必ず新しいブランチを作成してから作業しましょう。

特定ファイルを以前の状態に戻す

# 特定のコミット時点のファイルを復元
git checkout abc1234 -- config.yaml

# 1つ前のコミット時点に戻す
git checkout HEAD~1 -- config.yaml

ファイルはステージングエリアに追加された状態で復元されます。内容を確認してから git commit してください。

変更を破棄して最新コミットの内容に戻す

# 1ファイルの変更を破棄
git checkout -- app.py

# カレントディレクトリ以下の全変更を破棄
git checkout -- .

この操作は元に戻せません。変更を完全に失ってしまうため、慎重に実行してください。

エラー例(存在しないブランチ)

git checkout notfound

出力例:

error: pathspec 'notfound' did not match any file(s) known to git

ブランチ名のスペルミスか、リモートのフェッチ漏れが原因です。git branch -a で存在するブランチを確認し、リモートブランチの場合は先に git fetch を実行してください。

git switch / git restore との違い

Git 2.23 から、git checkout が担っていた2つの役割(ブランチ切り替えとファイル復元)が専用コマンドに分離されました。

目的旧コマンド(git checkout)新コマンド
ブランチの切り替えgit checkout <ブランチ名>git switch <ブランチ名>
新ブランチを作成して切り替えgit checkout -b <ブランチ名>git switch -c <ブランチ名>
ファイルの復元・変更破棄git checkout -- <ファイル>git restore <ファイル>
ステージ済み変更をアンステージgit restore --staged <ファイル>
タグ・コミットへの切り替えgit checkout <タグ/コミット>git switch --detach <タグ/コミット>

git switch の特徴

git switch はブランチ切り替え専用コマンドです。git checkout との大きな違いは、ブランチ名とファイル名が同一のときに誤ってファイルを上書きする事故を防げる点です。たとえば main というファイルが存在する場合、git checkout main はブランチに切り替えるのかファイルを復元するのか曖昧になりますが、git switch main はブランチ切り替えに限定されます。

git restore の特徴

git restore はファイルの復元・変更破棄専用コマンドです。git checkout -- <ファイル> と同等の操作に加え、--staged オプションでステージングエリアからファイルをアンステージ(git add の取り消し)できる点が便利です。

# ワーキングディレクトリの変更を破棄(git checkout -- と同等)
git restore app.py

# ステージ済みの変更をアンステージ
git restore --staged app.py

# 特定コミット時点のファイルに戻す(git checkout <commit> -- と同等)
git restore --source=abc1234 config.yaml

どちらを使うべきか

  • 新規プロジェクト・モダンな環境: git switch(ブランチ切り替え)/ git restore(ファイル復元)を使うと意図が明確になりミスが減る
  • 既存のスクリプト・古い環境・Git 2.23 未満: git checkout を使う
  • タグやコミットへの調査目的の切り替え: git checkout <タグ> は今も使いやすい選択肢

git checkout は将来的に非推奨になる可能性がありますが、現時点では削除予定はなく、ほぼすべての Git 環境で動作します。

ユースケース別まとめ

やりたいことコマンド
別ブランチに移動するgit checkout develop
新ブランチを作って移動するgit checkout -b feature-x
リモートブランチをローカルに作るgit checkout -b feature-x origin/feature-x
リリースタグのコードを確認するgit checkout v1.0.0
タグから修正ブランチを作るgit checkout -b hotfix/v1.0.1 v1.0.0
過去コミットを一時確認するgit checkout abc1234
1ファイルを特定コミットに戻すgit checkout abc1234 -- config.yaml
1ファイルの変更を捨てるgit checkout -- app.py
  • git branch : ブランチの作成・一覧・削除を行う。git checkout -b でブランチを作成する前に確認することが多い。
  • git switch : ブランチ切り替え専用の新コマンド(Git 2.23 以降)。git checkout <ブランチ名> の後継。
  • git restore : ファイルの復元・変更破棄専用の新コマンド(Git 2.23 以降)。git checkout -- <ファイル> の後継。
  • git stash : 未コミットの変更を一時退避させてからブランチを切り替えたいときに使う。
  • git fetch : リモートの最新情報を取得する。リモートブランチをチェックアウトする前に実行する。
  • git commit : ステージされた変更を記録する。ファイル復元後に内容を確定するときに使う。
  • git merge : ブランチを統合する。git checkout でブランチを切り替えた後に実行することが多い。
  • git init : 新しいリポジトリを作成するコマンド。git checkout を使い始める前の最初のステップ。
  • Git Bash : Windows 環境で git checkout を含む Git コマンドを使うためのシェル環境。

備考

  • Git 2.23 以降では git switch(ブランチ切り替え)と git restore(ファイル復元)が導入され、git checkout の役割が分離されました。新プロジェクトではこれらの使用が推奨されています。
  • detached HEAD 状態でコミットをすると、ブランチに紐付かない孤立したコミットになります。そのまま別ブランチに移動すると参照が失われる可能性があるため、作業する場合は必ず git checkout -b <新ブランチ名> でブランチを作成してください。
  • git checkout -- <ファイル> による変更破棄は元に戻せません。作業中の変更を保持したい場合は、先に git stash または別ブランチへのコミットをしてください。
  • ブランチ名とファイル名が同じ場合、-- を使って区別します(例: git checkout -- main)。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント