Solución: git push rechazado — Updates were rejected (non-fast-forward)
Git rechaza el push porque el remoto tiene commits que no tienes en local. Cómo resolverlo sin perder trabajo ni reescribir el historial del equipo.
¿Por qué ocurre?
El repositorio remoto tiene commits nuevos que no están en tu rama local. Puede ser porque un compañero hizo push mientras tú trabajabas, porque hiciste commits directamente en GitHub/GitLab, o porque hiciste un merge/squash desde la interfaz web.
Solución paso a paso
Solución estándar — pull + push:
# 1. Descarga los cambios remotos y fusiona
git pull origin main# 2. Si hay conflictos, resuélvelos y haz commit
git add .
git commit -m "Resolver conflictos de merge"
# 3. Ahora sí puedes hacer push
git push origin main
Solución limpia — rebase en lugar de merge (historial más limpio):
# Coloca tus commits encima de los del remoto
git pull --rebase origin main# Si hay conflictos durante el rebase:
# 1. Resuelve los archivos en conflicto
# 2. Continúa el rebase
git add .
git rebase --continue
# Si quieres cancelar el rebase y volver al estado anterior:
git rebase --abort
# 3. Push sin problemas
git push origin main
Si trabajas solo y quieres sobreescribir el remoto (cuidado con esto en equipos):
# Solo si estás SEGURO de que tus cambios locales son los correctos
git push --force-with-lease origin main
# Usa --force-with-lease, nunca --force a secas: evita borrar commits de otros
Ver qué commits tiene el remoto que tú no tienes:
git fetch origin
git log HEAD..origin/main --oneline
Cómo evitarlo en el futuro
Haz `git pull --rebase` antes de empezar a trabajar cada día. Configura git para que use rebase por defecto: `git config --global pull.rebase true`. En proyectos en equipo, nunca uses `--force`, usa siempre `--force-with-lease`.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts