git push
Definición
El comando git push sube el contenido del repositorio local al repositorio remoto. Hacer push es lo opuesto a hacer fetch. Si git fetch importa el contenido a las ramas locales, git push lo exporta a las ramas remotas.
Uso de git push
El comando git push se usa comúnmente para publicar cambios locales en el repositorio central. Después de realizar los cambios en el repositorio local, puedes usar git push para compartir las modificaciones con otros miembros del equipo. El comando git push es uno de los comandos que intervienen en el proceso de "sincronización". Estos comandos trabajan sobre las ramas remotas que se configuran con el comando git remote. Los commits se suben con git push y se descargan con git fetch y git pull. Después de hacer cambios en ambos casos, se usa git merge para integrar los cambios.
Los siguientes diagramas muestran la progresión del master local más allá del master del repositorio central y la publicación de cambios invocando git push origin master.

Opciones comunes
git push <remote> <branch> | Envía la rama especificada a <remote> con los commits necesarios, creando una rama remota en el repositorio de destino. |
|---|---|
git push <remote> --force | Fuerza el push incluso si da como resultado una actualización no fast-forward. Asegúrate de que nadie haya descargado los commits antes de usar la opción --force. |
git push <remote> --all | Envía todas las ramas locales al repositorio remoto. |
git push <remote> --tags | Envía las etiquetas de las ramas locales al repositorio remoto. La opción --all no enviará las etiquetas. |
Cómo hacer push a repositorios bare
Es muy seguro hacer push a repositorios creados con la bandera --bare, ya que no permite editar archivos ni confirmar cambios en ese repositorio. Se recomienda crear los repositorios centrales como bare; de lo contrario, hacer push a un repositorio no bare puede sobrescribir cambios.
Push forzado
Git puede rechazar tu solicitud de push si el historial del repositorio central no coincide con el local. En estos casos, debes hacer pull de la rama remota y fusionarla con el repositorio local, y luego volver a hacer push. La bandera --force sobrescribe la rama remota con la local, descartando cualquier cambio upstream que no se haya descargado. Usa push forzado cuando los commits compartidos sean incorrectos y se corrijan con git commit --amend o un rebase interactivo. Antes de usar la opción --force, asegúrate de que nadie haya descargado los commits. El rebase interactivo también es una buena forma de limpiar commits antes de compartirlos. El comando git commit --amend actualiza el commit anterior. Cuando se modifica un commit, git push fallará porque Git tratará el commit modificado y el commit remoto como contenido divergente. Aquí debe usarse --force para enviar el commit modificado.
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í hay un ejemplo de cómo eliminar la rama remota. El branch_name precedido por dos puntos en git push eliminará la rama remota:
eliminar rama remota, 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) al enviarle una referencia vacía.
Así es como funciona:
git push: envía cambios desde 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 quieres eliminarla antes de ejecutar el comando.
Usa la bandera -u para el primer push en una rama
Cuando tienes una rama local y quieres hacer push a un repositorio remoto por primera vez, debes especificar a qué rama del repositorio remoto te refieres. En Git, la bandera -u se usa con el comando git push para establecer la rama upstream de la rama actual. Cuando usas la bandera -u, Git creará un vínculo entre tu rama local y la rama remota. Este vínculo es útil para simplificar en el futuro los comandos git pull y git push, ya que permite a Git recordar qué rama remota corresponde a tu rama local.
La bandera -u es la abreviatura de --set-upstream. Cuando usas esta bandera, normalmente la verás usada así:
Usa la bandera -u para el primer push en una rama
git push -u origin your-branch-nameEjemplos de algunas de las banderas más usadas:
Aquí hay algunos ejemplos de cómo usar algunas de las banderas de git push:
Bandera -f:
git push -f origin masterEsto forzará el push de la rama local master al repositorio remoto origin, sobrescribiendo cualquier cambio que se haya podido hacer en la rama master del repositorio remoto. Usa esta bandera con precaución, ya que puede causar problemas si varias personas trabajan en la misma rama.
Bandera --tags:
git push --tags originEsto enviará todas las etiquetas al repositorio remoto origin. Las etiquetas se usan para marcar puntos importantes en el historial de tu proyecto, como versiones o hitos.
Bandera --all:
git push --all originEsto enviará todas las ramas locales al repositorio remoto origin.
Bandera --dry-run:
git push --dry-run origin masterEsto simulará un push a la rama master del repositorio remoto origin, sin enviar realmente nada. Esto puede ser útil para probar y comprobar qué cambios se enviarán antes de hacerlo de verdad.
Bandera --force-with-lease:
git push --force-with-lease origin masterEsto forzará el push de la rama local master al repositorio remoto origin, al mismo tiempo que garantiza que no sobrescribas cambios que se hayan podido hacer en la rama master del repositorio remoto desde tu última descarga. Esta es una alternativa más segura que usar la bandera -f.
Práctica
¿Qué afirmaciones son verdaderas con respecto al comando 'git push'?