Sinopsis
git push [<remote> [<refspec>...]] [--force-with-lease] [--tags] [--delete]
Descripción
El comando git push envía commits locales a un repositorio remoto, actualizando los branches remotos para coincidir con los locales. El primer push de un nuevo branch típicamente requiere -u para configurar el seguimiento. Por defecto, push es no destructivo: rechaza sobrescribir historial remoto que no tienes localmente. Usa --force-with-lease cuando genuinamente necesites reescribir historial remoto (tras un rebase): nunca uses --force simple en branches compartidos.
Push obedece reglas del lado del servidor: protecciones de branch, revisiones requeridas, commits firmados y hooks pre-receive pueden rechazar un push. Lee el mensaje de error con cuidado cuando esto pase.
En el uso diario, git push se integra con alias de shell. Para depurar, ejecuta con GIT_TRACE=1.
Entender cómo git push interactúa con el modelo de datos de Git ayuda a evitar reescribir historial compartido.
Opciones comunes
| Opción | Descripción |
|---|---|
-u, --set-upstream | Establece upstream para predeterminados de futuros push/pull. |
--force-with-lease | Force push solo si la ref remota coincide con tu último valor descargado. |
--force / -f | Sobrescribe historial remoto a la fuerza (peligroso en branches compartidos). |
--tags | Pushea todos los tags locales. |
--delete | Elimina un branch remoto. |
--dry-run | Muestra lo que se pushearía. |
--all | Pushea todos los branches. |
--atomic | Actualización todo-o-nada de múltiples refs. |
Ejemplos
git push -u origin feature/login
# Primer push de un nuevo branch con seguimiento
git push --force-with-lease
# Alternativa más segura a --force tras rebase
git push origin --delete old-feature
# Elimina un branch remoto
git push --tags
# Publica todos los tags locales
Errores comunes
El simple --force puede borrar commits de colegas. Usa --force-with-lease en su lugar. Pushear directamente a main evita la revisión de código en muchos equipos: configura protección de branch. Olvidar -u significa que comandos git push futuros necesitan argumentos explícitos.
Comandos relacionados
git fetch, git pull, git remote, git tag