発生する状況
GitHubやGitLabで新しいリポジトリを作成したばかりの時、セットアップ手順に従ってリモートURLを追加し、git push origin mainでコードをクラウドに送信しようとしたとします。しかし、アップロードが成功する代わりに、次のような2行のエラーメッセージが表示されることがあります。
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/user/repo.git'
これは、特に新しいプロジェクトでよく遭遇する障害です。このエラーは、Gitが技術的にまだ存在していないブランチを探しているために発生します。
エラーが発生する理由
**「src refspec main does not match any」**というメッセージは、プッシュするための「main」という名前のローカルブランチが見つからないというGitからの通知です。主な原因は以下の3つに集約されます:
- リポジトリが空である: Gitを初期化したものの、まだコミットを行っていない場合です。Gitは、コードのスナップショットが少なくとも1つ作成されるまで、実際にはブランチを作成しません。
- 「master」と「main」の不一致: 古いGitのバージョンではデフォルトのブランチ名が
masterですが、GitHubは2020年10月にデフォルトをmainに変更しました。masterで作業しているのに、mainにプッシュしようとしている可能性があります。 - 単純なタイポ(打ち間違い): Gitは文字の大小を区別します。ブランチ名が
Mainなのにmainと入力すると、コマンドは失敗します。
解決方法
1. 初回のコミットを行う
ファイルを1つもコミットしていない場合、mainブランチは存在しません。存在しないものはプッシュできないため、まずステータスを確認しましょう。
git status
もし「nothing to commit(コミットするものがない)」と表示された場合は、ファイルを追加して開始点を作成します:
git add .
git commit -m "初回コミット"
これで、もう一度プッシュコマンドを試してみてください。今度は動作するはずです。
2. ブランチ名を一致させる
git branchを実行して、ローカルブランチが実際には何と呼ばれているか確認してください。もし* masterと表示されているのにmainにプッシュしようとしている場合は、2つの選択肢があります。
方法 A:ローカルブランチ名を変更する(推奨)
最新の標準に合わせるために、ローカルのmasterをmainに変更します。-Mフラグを使用すると、そのブランチにチェックアウトしていなくても強制的に名前を変更できます:
git branch -M main
git push -u origin main
-uフラグは非常に便利です。これによりローカルブランチとリモートブランチが紐付けられ、次回からはgit pushと入力するだけで済むようになります。
方法 B:現在のブランチをそのままプッシュする
もしmasterという名前を使い続けたい場合は、プッシュコマンドをローカルの名前に合わせて変更するだけです:
git push origin master
3. タイポを確認する
git branchを実行し、出力をよく確認してください。ブランチ名がMainやdevの場合、プッシュコマンドもそれと完全に一致させる必要があります。Gitはユーザーの意図を推測してはくれません。
修正の確認
正しく動作したかどうかは、最後にもう一度git statusを実行して確認します。Your branch is up to date with 'origin/main'(ブランチは 'origin/main' と同期しています)というメッセージが表示されれば成功です。
ブラウザでGitHubのリポジトリページを更新してみてください。ファイルが表示され、ブランチのドロップダウンに最新のコミット履歴を伴うmainが正しく表示されているはずです。
クイックチェックリスト
git commitを実行しましたか?(ブランチが存在するには、少なくとも1つのコミットが必要です)git branchで表示される名前は、プッシュしようとしている名前と同じですか?- master/mainの名前の不一致を直すために
-M mainコマンドを使用しましたか?

