Git で git checkout ブランチ名 や git switch ブランチ名 を実行したとき、「error: pathspec 'xxx' did not match any file(s) known to git」というエラーが出て切り替えられないことがあります。
このエラーは Git が指定した名前(ブランチ・タグ・コミットハッシュ)を見つけられないときに発生します。原因はいくつかあるため、状況に合わせた対処が必要です。この記事では 5つの原因と解決方法 を順に解説します。
この記事でわかること
- 「pathspec did not match」エラーの意味
- 原因1:ブランチ名のタイプミス・大文字小文字の違い
- 原因2:リモートブランチをフェッチしていない
- 原因3:初期コミットが存在しない(空のリポジトリ)
- 原因4:タグ操作時の注意点
- 原因5:ブランチ自体が存在しない(新規作成が必要)
エラーの意味
error: pathspec 'develop' did not match any file(s) known to git
このエラーは、Git が指定した名前(ブランチ名・タグ名・コミットハッシュなど)を解決できなかったときに発生します。
主に git checkout・git switch・git restore を実行したときに見られます。
原因1:ブランチ名のタイプミス・大文字小文字の違い
最も多い原因は ブランチ名のスペルミス や 大文字小文字の違い です。Git のブランチ名は大文字と小文字を区別します(Main と main は別ブランチ)。
対処方法:存在するブランチを確認する
# ローカルブランチの一覧を確認 git branch # リモートを含む全ブランチを確認 git branch -a # 出力例 * main develop feature/login remotes/origin/main remotes/origin/develop
一覧に表示されたブランチ名と、入力したブランチ名が一致しているか確認してください。
大文字小文字の違いに注意
git checkout Develop と git checkout develop は別ブランチを指します。GitHub では main がデフォルトブランチですが、古いリポジトリでは master の場合があります。原因2:リモートブランチをフェッチしていない
チームメンバーが作成したブランチや、GitHub 上で作成したブランチは、git fetch を実行しないとローカルに反映されません。
対処方法:フェッチしてからチェックアウト
# 最新のリモート情報を取得 git fetch # または特定のリモートからフェッチ git fetch origin # 全リモートからフェッチ git fetch --all
# フェッチ後にリモートブランチを確認 git branch -a # リモートブランチからローカルブランチを作成してチェックアウト git checkout -b feature/login origin/feature/login # または(Git 2.23以降) git switch feature/login
git switch ブランチ名 は自動でリモートを探してくれるGit 2.23 以降では
git switch がリモートブランチを自動的に探して追跡ブランチを作成してくれます。git checkout -b より簡単に使えます。ただし Git のバージョンが古い場合は checkout -b を使ってください。原因3:初期コミットがない(空のリポジトリ)
git init 直後でコミットが1件もない状態では、ブランチ自体が存在しないため、git checkout はエラーになります。
# 空のリポジトリでの確認方法 git log # → fatal: your current branch 'main' does not have any commits yet # 解決: 最初のコミットを作成する git add . git commit -m "Initial commit"
新規リポジトリで発生しやすい
git init 後、何もコミットしないうちに git checkout -b develop などを実行するとこのエラーになります。最初のコミットを作成してからブランチ操作を行ってください。原因4:タグ・コミットハッシュ操作時の注意
タグやコミットハッシュを指定して git checkout する場合も同様のエラーが発生します。タグが存在しない・フェッチされていないケースです。
# タグの一覧を確認 git tag # リモートのタグをフェッチ git fetch --tags # タグへのチェックアウト git checkout v1.0.0
# コミットハッシュで確認 git log --oneline -10 # 特定コミットへのチェックアウト(detached HEAD 状態) git checkout a1b2c3d
原因5:ブランチが存在しない(新規作成が必要)
切り替えたいブランチがローカルにもリモートにも存在しない場合は、-b オプションで新規作成します。
# 新しいブランチを作成してチェックアウト git checkout -b feature/new-feature # または(Git 2.23以降) git switch -c feature/new-feature # 特定のブランチから分岐して新規ブランチを作成 git checkout -b feature/new-feature origin/develop
状況別の対処フローまとめ
| 状況 | 確認コマンド | 解決方法 |
|---|---|---|
| ブランチ名を間違えた | git branch -a で確認 |
正しいブランチ名で再実行 |
| リモートブランチが見えない | git branch -r で確認 |
git fetch 後に再試行 |
| 空のリポジトリ | git log でコミットなし |
先に git commit を実行 |
| タグが存在しない | git tag で確認 |
git fetch --tags 後に再試行 |
| ブランチを新規作成したい | — | git checkout -b ブランチ名 |
よくある質問
Q. git fetch と git pull の違いは何ですか?
A.
git fetch はリモートの情報を取得するだけで、ローカルのブランチは変更しません。git pull は git fetch + git merge(または git rebase)をまとめて行います。ブランチの存在確認だけなら git fetch の後に git branch -a で確認してください。Q. git switch と git checkout の違いは?
A.
git switch は Git 2.23 で追加された新しいコマンドで、ブランチの切り替えに特化しています。git checkout はブランチ切り替え・ファイルの復元・コミット参照など多用途ですが、その分わかりにくい挙動があります。新しいバージョンの Git では git switch の使用が推奨されています。Q. git branch -a の出力に remotes/origin/xxx はあるのにチェックアウトできません。
A.
git checkout ブランチ名 とスラッシュなしで試してください。remotes/origin/feature/login が表示されている場合、git switch feature/login または git checkout -b feature/login origin/feature/login で作成できます。Git 2.23 以降では git switch feature/login だけで自動的にリモート追跡ブランチを作ってくれます。Q. git clone したばかりなのにブランチが見えません。
A.
git clone はデフォルトブランチ(通常 main または master)しか作成しませんが、リモートブランチの情報は取得しています。git branch -a で remotes/origin/xxx として確認できます。git switch ブランチ名 または git checkout -b ブランチ名 origin/ブランチ名 でローカルブランチを作成してください。Q. ブランチ名に特殊文字やスペースが含まれていますが大丈夫ですか?
A. ブランチ名にスペースは使えません。スラッシュ(
feature/login)・ハイフン(feature-login)・アンダースコア(feature_login)は使えます。スペースを含む場合はシェルのクォーテーション(git checkout 'branch name')で囲む必要がありますが、そもそもブランチ名にスペースを含むのは避けることを推奨します。まとめ
「pathspec did not match」エラーの解決フロー
- まず
git branch -aでブランチ名を確認(タイプミス・大文字小文字) - リモートブランチが見えない →
git fetchを実行 - 空のリポジトリ → 最初の
git commitを実行してからブランチ操作 - タグが見えない →
git fetch --tagsでタグを取得 - ブランチを新規作成 →
git checkout -b ブランチ名またはgit switch -c ブランチ名
