Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Git dice “src refspec main does not match any”? Demuestra el origen local antes de enviar

El error se refiere al origen local del refspec; no demuestra que GitHub rechazó una rama existente. Verifica que HEAD sea un commit y que exista refs/heads/main, y después elige el primer commit, la rama correcta o un mapa explícito desde HEAD.

Diagrama técnico original que verifica HEAD, el ref local exacto y un mapa explícito de push.
Ilustración original: demuestra el origen antes de elegir el comando push. Watch at Ease

“src refspec main does not match any” significa que Git no pudo resolver el origen local indicado a la izquierda del push. No prueba que exista un conflicto remoto, que falle la autenticación ni que haga falta forzar.

Conserva el comando y demuestra dos cosas localmente: HEAD resuelve a un commit y existe el ref de origen exacto. Solo entonces crea el primer commit, envía la rama real, renómbrala deliberadamente o mapea HEAD al destino remoto.

Conserva el comando y demuestra HEAD

Guarda el push exacto, la ruta, git status --short --branch, git branch --show-current y git remote -v. Un script puede usar main aunque la rama real tenga otro nombre o HEAD esté separado.

Ejecuta git rev-parse --verify HEAD^{commit}. Si falla en un repositorio nuevo, revisa los cambios, prepara solo lo previsto y crea el primer commit real; no fabriques un commit vacío solo para ocultar el error.

Comprueba el origen local exacto

Si el comando nombra main, ejecuta git show-ref --verify refs/heads/main. Un resultado distinto de cero indica que no existe esa rama local aunque haya un ref remoto o una etiqueta con main.

Compara git symbolic-ref --short -q HEAD con git branch --show-current. Si el commit está en otra rama, envía esa rama o renómbrala de forma consciente.

Usa un mapa explícito cuando corresponda

Si HEAD es el commit correcto pero no debes crear main local, usa git push -u origin HEAD:refs/heads/main. La izquierda es el origen demostrado y la derecha la rama remota.

Si necesitas main local, confirma primero qué commit debe señalar, créala o renómbrala y vuelve a revisar show-ref y git log -1 --decorate.

Separa el rechazo remoto

Si Git contacta al remoto e informa non-fast-forward, el origen ya se resolvió. Haz fetch, inspecciona la divergencia e integra según la política del repositorio.

No uses --force para “does not match any”. Force no crea un origen ausente y puede sobrescribir historia remota.

Verifica y cierra

Tras una corrección estrecha, ejecuta un solo push y confirma origen, destino, upstream de -u y el commit de git rev-parse HEAD.

Revisa git status --short --branch y git ls-remote --heads origin main; registra si la causa fue historia no nacida, nombre incorrecto, HEAD separado, wrapper o divergencia remota.

Diagrama original que separa historia vacía, rama ausente, mapa HEAD y rechazo remoto.
Ilustración original: un origen ausente y non-fast-forward son fallos distintos. Watch at Ease