git push

El comando git push se utiliza para subir el contenido del repositorio local a un repositorio remoto. Con el comando

Pushing

se transfieren los commits del repositorio local a un repositorio remoto. Es la contrapartida de git fetch, pero mientras que fetch importa los commits a las ramas locales, pushing exporta los commits a las ramas remotas. Las ramas remotas se configuran con el comando git remote. El empuje tiene el potencial de sobrescribir los cambios, se debe tener cuidado al empujar. Estos problemas se discuten a continuación.

Uso de Git push

git push <remote> <branch>

Pulsar la rama especificada a , junto con todos los commits y objetos internos necesarios. Esto crea una rama local en el repositorio de destino. Para evitar que sobrescribas commits, Git no te dejará hacer un push cuando resulte en una fusión no rápida en el repositorio de destino.

git push <remote> --force

Igual que el comando anterior, pero forzando el push incluso si resulta en una fusión no rápida. No use la bandera --force a menos que esté absolutamente seguro de que sabe lo que está haciendo.

git push <remote> --all

Empuje todas sus ramas locales a la remota especificada.

git push <remote> --tags

Las etiquetas no se empujan automáticamente cuando se empuja una rama o se utiliza la opción --all. La bandera --tags envía todas tus etiquetas locales al repositorio remoto.

Discusión sobre Git push

git push se utiliza más comúnmente para publicar una subida de cambios locales a un repositorio central. Después de modificar un repositorio local se ejecuta un push para compartir las modificaciones con los miembros del equipo remoto.

Usando git push para publicar cambios

El diagrama anterior muestra lo que ocurre cuando tu master local ha pasado el master del repositorio central y publicas los cambios ejecutando git push origin master. Fíjate en que git push es esencialmente lo mismo que ejecutar git merge master desde dentro del repositorio remoto.

git push es un componente de los muchos que se utilizan en el proceso general de «sincronización» de Git. Los comandos de sincronización operan sobre ramas remotas que se configuran mediante el comando git remotegit push puede considerarse un comando de «subida» mientras que, git fetch y git pull pueden considerarse comandos de «descarga». Una vez que los conjuntos de cambios se han movido a través de una descarga o una subida, se puede realizar un git merge en el destino para integrar los cambios.

Empujar a los repositorios desnudos

Una práctica moderna y frecuentemente utilizada de Git es tener un repositorio alojado remotamente --bare que actúe como repositorio de origen central. Este repositorio de origen suele estar alojado fuera de las instalaciones de un tercero de confianza como Bitbucket. Dado que empujar desordena la estructura de la rama remota, es más seguro y más común empujar a los repositorios que han sido creados con la bandera --bare. Los repositorios desnudos no tienen un directorio de trabajo, por lo que un push no alterará ningún contenido del directorio de trabajo en curso. Para más información sobre la creación de repositorios desnudos, lee sobre git init.

Forzar el empuje

Git evita que se sobrescriba el historial del repositorio central rechazando las peticiones push cuando resultan en una fusión no rápida. Así que, si el historial remoto ha divergido de tu historial, tienes que tirar de la rama remota y fusionarla con la local, y luego intentar empujar de nuevo. Esto es similar a cómo SVN hace que se sincronice con el repositorio central a través de svn update antes de confirmar un conjunto de cambios.

La bandera --force anula este comportamiento y hace que la rama del repositorio remoto coincida con la local, eliminando cualquier cambio de aguas arriba que pueda haber ocurrido desde la última extracción. La única vez que debería necesitar forzar el push es cuando se da cuenta de que los commits que acaba de compartir no eran del todo correctos y los arregla con un git commit --amend o un rebase interactivo. Sin embargo, debes estar absolutamente seguro de que ninguno de tus compañeros de equipo ha sacado esos commits antes de usar la opción --force.

Git push por defecto

El siguiente ejemplo describe uno de los métodos estándar para publicar contribuciones locales al repositorio central. En primer lugar, se asegura de que tu maestro local está actualizado, recuperando la copia del repositorio central y volviendo a basar tus cambios sobre ellos. El rebase interactivo es también una buena oportunidad para limpiar sus confirmaciones antes de compartirlas. Entonces, el comando git push envía todos los commits de tu master local al repositorio central.

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

Dado que ya nos hemos asegurado de que el maestro local estaba actualizado, esto debería resultar en una fusión rápida, y git push no debería quejarse de ninguno de los problemas no rápidos comentados anteriormente.

Forzar push modificado

El comando git commit acepta una opción --amend que actualizará el commit anterior. Una confirmación se modifica a menudo para actualizar el mensaje de confirmación o añadir nuevos cambios. Una vez que se modifica un commit, un git push fallará porque Git verá el commit modificado y el commit remoto como contenido divergente. La opción --force debe utilizarse para empujar un commit modificado.

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

El ejemplo anterior supone que se está ejecutando en un repositorio existente con un historial de commits. git commit --amend se utiliza para actualizar el commit anterior. El commit modificado es entonces forzado a ser empujado usando la opción --force.

Eliminación de una rama o etiqueta remota

A veces las ramas necesitan ser limpiadas por motivos de contabilidad o de organización. Para eliminar completamente una rama, hay que borrarla localmente y también remotamente.

git branch -D branch_name
git push origin :branch_name

Lo anterior borrará la rama remota llamada nombre_de_rama pasando un nombre de rama prefijado con dos puntos a git push borrará la rama remota.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *