Close

git push

El comando git push se usa para cargar contenido del repositorio local a un repositorio remoto. El envío es la forma de transferir confirmaciones desde tu repositorio local a un repositorio remoto. Es el equivalente a git fetch, pero mientras que al recuperar se importan las confirmaciones a ramas locales, al enviar estas se exportan a ramas remotas. Las ramas remotas se configuran mediante el comando git remote. Los envíos pueden sobrescribir los cambios, por lo que se debe tener cuidado a la hora de realizarlos. Estas incidencias se describen a continuación.


Uso de git push


git push <remote> <branch>

Envía la rama especificada, junto con todas las confirmaciones y objetos internos necesarios. De este modo se crea una rama local en el repositorio de destino. Para evitar que se sobrescriban las confirmaciones, Git no te permitirá enviarlas cuando el resultado en el repositorio de destino sea una fusión sin avance rápido.

git push <remote> --force

Es igual que el comando anterior, pero fuerza el envío incluso si el resultado es una fusión sin avance rápido. No uses la marca --force a menos de que tengas absoluta certeza de lo que estás haciendo.

Envía todas tus ramas locales a una rama remota especificada.

git push <remote> --tags
Ventana de consola
Material relacionado

Git log avanzado

Logotipo de Bitbucket
VER LA SOLUCIÓN

Aprende a usar Git con Bitbucket Cloud

Las etiquetas no se envían automáticamente cuando envías una rama o usas la opción --all. La marca --tags envía todas las etiquetas locales al repositorio remoto.

Análisis de git push


git push se usa sobre todo para publicar y cargar cambios locales a un repositorio central. Después de modificar el repositorio local, se ejecuta un envío para compartir las modificaciones con los miembros remotos del equipo.

Uso de git push para publicar cambios

El diagrama anterior muestra lo que pasa cuando el progreso de tu rama principal local ha sobrepasado a la rama principal del repositorio central y publicas los cambios ejecutando git push origin main. Fíjate en que ejecutar git push es en esencia lo mismo que ejecutar git merge main desde el repositorio remoto.

Git push y la sincronización


git push es uno de los muchos componentes que se usan en el proceso general de "sincronización" de Git. Los comandos de sincronización funcionan en ramas remotas que se configuran mediante el comando git remote. A git push se le puede considerar un comando de carga, mientras que, a git fetch y a git pull, comandos de descarga. Una vez movidos los conjuntos de cambios mediante una descarga o una carga, se puede ejecutar un comando git merge en el destino para integrarlos.

Envíos a repositorios bare


Una práctica de Git moderna y que se usa muy a menudo consiste en contar con un repositorio --bare alojado de forma remota que actúa como un repositorio de origen central. Este repositorio de origen se suele alojar fuera de las instalaciones en un tercero fiable, por ejemplo, Bitbucket. Como los envíos interfieren en la estructura de la rama remota, lo más seguro y común es enviar a repositorios creados con la marca --bare. Los repositorios bare no tienen un directorio en funcionamiento, por lo que un envío no alterará el trabajo en curso sobre el contenido de un directorio en funcionamiento. Para obtener más información sobre la creación de repositorios bare, consulta la sección sobre git init.

Envío forzado


Git evita que sobrescribas el historial del repositorio central al negarse a enviar solicitudes cuando el resultado es una fusión sin avance rápido. De este modo, si el historial remoto difiere de tu historial, tendrás que incorporar una rama remota y fusionarla con la local para después intentar enviarla de nuevo. Este proceso es similar a la forma en la que SVN realiza la sincronización con el repositorio central mediante el comando svn update antes de confirmar un conjunto de cambios.

La marca --force anula este comportamiento y hace que la rama del repositorio remoto coincida con la local, y se eliminan así todos los cambios en el repositorio remoto que se hayan producido desde que realizaste la última incorporación de cambios. La única situación en la que podrías tener que forzar el envío es cuando te das cuenta de que las confirmaciones que acabas de compartir no están del todo bien y las corriges mediante un comando git commit --amend o una fusión mediante cambio de base interactiva. No obstante, antes de usar la opción --force, debes tener la certeza absoluta de que ninguno de tus compañeros de equipo ha incorporado los cambios de esas confirmaciones.

Ejemplos


Comando git push predeterminado

El siguiente ejemplo describe uno de los métodos estándar para publicar contribuciones locales en el repositorio central. En primer lugar, se asegura de que tu rama principal local está actualizada; para ello, recupera la copia del repositorio central y fusiona los cambios sobre esa base. La fusión mediante cambio de base interactiva también constituye una buena oportunidad para limpiar tus confirmaciones antes de compartirlas. Acto seguido, el comando git push envía todas las confirmaciones de tu rama principal local al repositorio central.

git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main

Como ya nos hemos asegurado de que la rama principal local está actualizada, esta acción debería generar una fusión con avance rápido, y el comando git push no debería realizar ningún bloqueo debido a las incidencias de la falta de avance rápido analizados anteriormente.

Envío forzado corregido

El comando git commit admite una opción --amend que actualizará la confirmación anterior. Las confirmaciones suelen corregirse para actualizar el mensaje que contienen o añadir cambios nuevos. En cuanto se corrige una confirmación, git push da un fallo porque Git contempla tanto la confirmación corregida como la remota como contenido divergente. Hay que usar la opción --force para enviar una confirmación corregida.

# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main

El ejemplo anterior presupone que se está ejecutando en un repositorio existente con un historial de confirmaciones. El comando git commit --amend sirve para actualizar la confirmación anterior. Acto seguido, la confirmación corregida se envía de forma forzada mediante la opción --force.

Eliminación de una rama o etiqueta remotas

En ocasiones, se deben limpiar las ramas por motivos de organización y mantenimiento de registros. Para eliminar una rama por completo, se debe eliminar tanto de forma local como de forma remota.

git branch -D branch_name
git push origin :branch_name

La opción anterior eliminará la rama remota denominada "branch_name" al pasar un nombre de rama con dos puntos como prefijo por el comando git push.


Compartir este artículo
Tema siguiente

Lecturas recomendadas

Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.

Gente que colabora utilizando un muro lleno de herramientas

Blog de Bitbucket

Ilustración de Devops

Ruta de aprendizaje de DevOps

Demostraciones de funciones con expertos de Atlassian del Centro de demostraciones

Cómo funciona Bitbucket Cloud con Atlassian Open DevOps

Suscríbete para recibir el boletín de DevOps

Thank you for signing up