git push
En esta página encontrarás información útil sobre el comando git push, su uso, las opciones más comunes y consejos importantes al respecto.
Esta página explica qué hace git push, la sintaxis y las opciones más útiles, cómo funciona el push contra repositorios bare y non-bare, cómo configurar una rama upstream, cómo hacer force-push de forma segura y cómo eliminar una rama remota. Los ejemplos utilizan comandos Git y salidas reales para que puedas seguirlos paso a paso.
Definición
El comando git push sube los commits de tu repositorio local a un repositorio remoto. El push es lo opuesto del fetch: donde git fetch importa commits a tus ramas de seguimiento locales, git push exporta tus commits locales a las ramas remotas para que los colaboradores puedan verlos.
La sintaxis básica es:
git push <remote> <branch><remote> es el nombre del remoto (más comúnmente origin), y <branch> es la rama local cuyos commits quieres publicar.
Uso de git push
El comando git push se utiliza normalmente para publicar cambios locales en un repositorio central. Después de confirmar los cambios localmente, ejecutas git push para compartirlos con el resto del equipo. Es uno de los comandos que forman parte del flujo de trabajo de sincronización. Estos comandos operan sobre las ramas remotas configuradas con el comando git remote: los commits se suben con git push y se descargan con git fetch y git pull. Tras la descarga, git merge integra los cambios en tu rama de trabajo.
Un push exitoso imprime un resumen de lo que se transfirió. Por ejemplo, hacer push de dos nuevos commits a master tiene este aspecto:
$ git push origin master
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Writing objects: 100% (6/6), 612 bytes | 612.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:example/repo.git
a1b2c3d..e4f5g6h master -> masterLa línea a1b2c3d..e4f5g6h master -> master confirma qué commits se movieron y que tu master local ahora coincide con el master remoto.
El siguiente diagrama muestra la progresión del master local más allá del master del repositorio central, y la publicación de esos cambios mediante git push origin master.

Opciones comunes
git push <remote> <branch> | Hace push de la rama especificada a <remote> con los commits necesarios, creando una rama remota en el repositorio destino. |
|---|---|
git push <remote> --force | Fuerza el push incluso si resulta en una actualización non-fast-forward. Asegúrate de que nadie ha hecho pull de los commits antes de usar la opción --force. |
git push <remote> --all | Hace push de todas las ramas locales al repositorio remoto. |
git push <remote> --tags | Hace push de las etiquetas de las ramas locales al repositorio remoto. La opción --all no hace push de las etiquetas. |
git push -u <remote> <branch> | Hace push de la rama y la registra como rama upstream (de seguimiento), de modo que en el futuro git push y git pull pueden ejecutarse sin argumentos. |
git push <remote> --force-with-lease | Fuerza el push solo si la rama remota no ha avanzado desde la última vez que hiciste fetch — una alternativa más segura a --force. |
git push <remote> --dry-run | Muestra lo que se enviaría sin enviar nada al remoto. |
Cómo hacer push a repositorios bare
Un repositorio bare es uno creado con el flag --bare (git init --bare o git clone --bare). No tiene directorio de trabajo, por lo que nadie puede editar archivos ni hacer commits directamente en él. Esto lo hace seguro para recibir pushes, razón por la que los repositorios centrales/compartidos (los alojados en un servidor o servicio como GitHub) son bare. Hacer push a un repositorio non-bare cuya rama de trabajo está activa puede entrar en conflicto con el árbol de trabajo de esa rama, motivo por el que Git rechaza dichos pushes por defecto.
# create a shared central repository
git init --bare central.gitQué ocurre cuando se rechaza un push
Git rechaza tu push cuando la rama remota contiene commits que no tienes en local — una actualización non-fast-forward. Esto suele significar que un compañero hizo push primero. El error tiene este aspecto:
$ git push origin master
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'github.com:example/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.La solución es traer primero el trabajo remoto y luego volver a hacer push:
git pull origin master # fetch + merge (or use --rebase)
git push origin masterRecurre a --force solo cuando quieras sobrescribir deliberadamente el historial remoto (ver más abajo) — no para saltarte esta comprobación de seguridad en ramas compartidas.
Force pushing
El flag --force sobrescribe la rama remota con la tuya local, descartando cualquier commit upstream que no hayas descargado. Úsalo solo cuando hayas reescrito intencionalmente el historial — por ejemplo, tras git commit --amend o un git rebase interactivo — y estés seguro de que nadie más ha trabajado sobre los commits que estás reemplazando. Cuando un commit se enmienda o se rebasa, su hash cambia, de modo que Git lo trata a él y al commit remoto como contenido divergente y rechaza un push normal; --force es necesario para publicar el commit reescrito.
Para ramas compartidas, prefiere --force-with-lease (explicado más abajo): rechaza sobrescribir el trabajo que el remoto recibió después de tu último fetch, por lo que no puedes destruir silenciosamente los commits de un compañero.
git push --force
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin masterCómo eliminar una rama remota
Aquí tienes un ejemplo de cómo eliminar la rama remota. El branch_name precedido de dos puntos en git push eliminará la rama remota:
delete remote branch, git push
git branch -D branch_name
git push origin :branch_nameEl comando git push origin :branch_name elimina la rama especificada (branch_name) del repositorio remoto (origin) haciendo push de una referencia vacía a ella.
Cómo funciona
git push: sube los cambios de tu repositorio Git local a un repositorio remotoorigin: el nombre del repositorio remoto:branch_name: un refspec que representa una referencia vacía, eliminando efectivamente la rama especificada del repositorio remoto
Así que cuando ejecutas git push origin :branch_name, Git eliminará la rama branch_name del repositorio remoto origin.
Ten en cuenta que este comando puede ser peligroso si se usa incorrectamente, ya que eliminará la rama sin ninguna confirmación ni posibilidad de recuperación. Asegúrate de verificar dos veces el nombre de la rama y de que realmente deseas eliminarla antes de ejecutar el comando.
Usa el flag -u en el primer push de una rama
Cuando tienes una rama local y quieres hacer push al repositorio remoto por primera vez, debes especificar a qué rama del repositorio remoto te refieres. En Git, el flag -u se usa con el comando git push para establecer la rama upstream de la rama actual. Al usar el flag -u, Git creará un enlace entre tu rama local y la rama remota. Este enlace es útil para simplificar los comandos git pull y git push en el futuro, ya que permite a Git recordar qué rama remota corresponde a tu rama local.
El flag -u es la forma abreviada de --set-upstream. Cuando usas este flag, normalmente lo verás así:
Use -u flag for the first push on a branch
git push -u origin your-branch-nameDespués de esto, tu rama local rastrea origin/your-branch-name. A partir de ese momento puedes ejecutar git push y git pull sin argumentos adicionales mientras estés en esa rama, y git status informará cuántos commits de ventaja o desventaja tienes respecto al remoto. Consulta git branch para más información sobre ramas locales y de seguimiento remoto.
Ejemplos de flags de uso común
Aquí tienes ejemplos breves de los flags más útiles de git push.
-f (force)
git push -f origin masterHace force-push de la rama master local a origin, sobrescribiendo cualquier commit en el master remoto que no tengas en local. -f es la forma abreviada de --force. Úsalo con precaución — puede borrar commits que otras personas subieron si están trabajando en la misma rama.
--tags
git push origin --tagsHace push de todas tus etiquetas locales a origin. Las etiquetas marcan puntos importantes en el historial, como versiones o hitos. Un git push normal no transfiere las etiquetas, por lo que este flag (o hacer push de una etiqueta específica con git push origin <tagname>) es la forma de publicarlas. Consulta git tag para más información sobre cómo crear etiquetas.
--all
git push origin --allHace push de todas las ramas locales a origin con un solo comando. Ten en cuenta que --all no incluye las etiquetas — combínalo con un push separado de --tags si necesitas ambas cosas.
--dry-run
git push --dry-run origin masterSimula el push e informa sobre lo que se enviaría, sin transferir nada. Es útil para confirmar exactamente qué commits y referencias actualizará un push antes de ejecutarlo de verdad.
--force-with-lease
git push --force-with-lease origin masterHace force-push de master a origin solo si la rama remota apunta al mismo sitio que la última vez que hiciste fetch. Si alguien ha hecho push mientras tanto, el comando se interrumpe en lugar de sobrescribir su trabajo. Esta es la alternativa más segura a -f/--force.