テクノロジー · 実用ガイド
Git の「src refspec main does not match any」?push 前にローカルの source を証明する
このエラーは refspec のローカル source を示し、GitHub が既存ブランチを拒否した証拠ではありません。HEAD が commit で refs/heads/main が存在するか確認してから、最初の commit、正しい branch、または明示的な HEAD mapping を選びます。

「src refspec main does not match any」は、push の左側で指定したローカル source を Git が解決できなかったという意味です。remote の main が競合した、認証が失敗した、force が必要という証明ではありません。
元のコマンドを保存し、HEAD が commit に解決することと、指定した source ref が存在することを確認します。その後で最初の commit、実際の branch、意図的な rename、または HEAD から remote への明示 mapping を選びます。
コマンドを保存し HEAD を証明
push コマンド、repository path、git status --short --branch、git branch --show-current、git remote -v を保存します。script が main を固定していても実際は別名や detached HEAD かもしれません。
git rev-parse --verify HEAD^{commit} を実行します。新規 repository で失敗したら変更を確認し、必要なものだけ stage して最初の実 commit を作ります。エラーを消すだけの dummy commit は避けます。
正確なローカル source ref を確認
main を指定したなら git show-ref --verify refs/heads/main を実行します。非0なら remote-tracking ref や tag に main があっても、そのローカル branch はありません。
git symbolic-ref --short -q HEAD と git branch --show-current を比較します。必要な commit が別 branch にあるならその branch を push するか、意図して rename します。
必要なら明示 mapping を使う
HEAD は正しい commit だがローカル main を作らない場合、git push -u origin HEAD:refs/heads/main を使えます。左が証明済み source、右が remote branch です。
ローカル main が必要なら、指すべき commit を確認後に作成または rename し、show-ref と git log -1 --decorate を再確認します。
remote rejection を別分岐にする
Git が remote に到達して non-fast-forward を返したなら source は解決済みです。fetch し、分岐を確認して policy に従い統合します。
「does not match any」を --force で直さないでください。force は欠けた source を作れず、remote 履歴を上書きする危険があります。
結果を検証して終了
狭い修正を1つ行って push を1回再実行し、source、destination、-u の upstream、git rev-parse HEAD の commit ID を確認します。
git status --short --branch と git ls-remote --heads origin main を確認し、原因を unborn history、branch 名、detached HEAD、wrapper、remote divergence のどれかとして記録します。
