Por Anónimo (no verificado) , 29 Abril 2026

Introducción

git push sube commits locales a un remoto y actualiza los branches y tags de ese remoto. Es cómo tu trabajo se hace visible a los colaboradores.

Push básico

git push                          # branch actual a su upstream
git push origin main              # explícito
git push -u origin feature/login  # establecer upstream y push

El flag -u (o --set-upstream) vincula el branch local con el remoto, así que futuros git push y git pull no necesitan argumentos.

Pusheando tags

Los tags no se pushean por defecto:

git push origin v1.2.3
git push origin --tags          # todos los tags
git push --follow-tags          # tags alcanzables desde commits pusheados

--follow-tags es el predeterminado más seguro para flujos de release.

Eliminando branches remotos

git push origin --delete feature/login
# equivalentemente
git push origin :feature/login

Force-push de forma segura

Reescribir el historial (rebase, amend, squash) requiere un force push. Siempre prefiere --force-with-lease, que se rehúsa a aplastar refs que se movieron en el servidor:

git push --force-with-lease
git push --force-with-lease=feature/login:abcd1234

Nunca --force ciegamente a un branch compartido como main.

Configurando valores predeterminados de push

git config --global push.default simple    # predeterminado desde 2.0
git config --global push.autoSetupRemote true   # 2.37+: -u automático

Con push.autoSetupRemote establecido, un git push simple en un nuevo branch crea el branch remoto y los vincula automáticamente.

Qué pasa durante el push

  1. Git local negocia con el remoto para encontrar commits comunes.
  2. Empaqueta y sube solo los objetos faltantes.
  3. El remoto ejecuta los hooks pre-receive y update.
  4. Si se acepta, las refs se actualizan atómicamente.
  5. El hook post-receive se ejecuta (CI, mirroring, etc.).

Pushes atómicos y firmados

--atomic convierte pushes multi-ref en una sola transacción; o todas las refs se actualizan o ninguna lo hace, lo que previene despliegues parciales. --signed envía un certificado de push firmado con GPG que algunos hosts registran para auditoría:

git push --atomic origin main release/1.2
git push --signed origin main

Para sistemas automatizados, la opción --receive-pack te permite especificar un receive-pack alternativo en el servidor, ocasionalmente necesario para hosts con binarios no estándar. Siempre usa git push --dry-run al ejecutar pushes destructivos por primera vez en un script.

Errores comunes

Pushear a main cuando querías un branch de feature, porque olvidaste en qué branch estabas. Ejecuta git status primero. Usar git push --force contra main y reescribir los commits de otras personas; recupera con el reflog del remoto (si tienes acceso por shell) o re-pusheando desde el clon de un compañero. Pushear sin credenciales configuradas y quedar colgado en un prompt de contraseña; configura un asistente de credenciales o clave SSH. Finalmente, pushes grandes pueden fallar al último momento si un hook los rechaza; si es así, el mensaje de rechazo nombra el commit ofensor. Léelo con cuidado en lugar de re-ejecutar ciegamente.