# git push

El `git push`comando se utiliza para cargar el contenido del repositorio local en un repositorio remoto. Empujar es cómo transfieres las confirmaciones de tu repositorio local a un repositorio remoto. Es la contraparte de [`git fetch`](https://www.atlassian.com/git/tutorials/syncing/git-fetch), pero mientras que la obtención de las importaciones se compromete con las sucursales locales, las exportaciones se envían a las sucursales remotas. Las ramas remotas se configuran mediante el [`git remote`](https://www.atlassian.com/git/tutorials/syncing) comando. Empujar tiene el potencial de sobrescribir cambios, se debe tener cuidado al empujar. Estos problemas se analizan a continuación.

### Uso de Git push

```
git push <remote> <branch>
```

Empuje la rama especificada para , junto con todas las confirmaciones necesarias y los objetos internos. Esto crea una sucursal local en el repositorio de destino. Para evitar que sobrescriba las confirmaciones, Git no le permitirá presionar cuando resulte en una fusión que no sea de avance rápido en el repositorio de destino.

```
git push <remote> --force
```

Igual que el comando anterior, pero fuerce el empuje incluso si da como resultado una combinación que no sea de avance rápido. No use la `--force`bandera a menos que esté absolutamente seguro de saber lo que está haciendo.

```
git push <remote> --all
```

Empuje todas sus sucursales locales al control remoto especificado.

```
git push <remote> --tags
```

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

## Discusión de Git push

`git push`se utiliza más comúnmente para publicar y cargar cambios locales en un repositorio central. Una vez que se ha modificado un repositorio local, se ejecuta una inserción para compartir las modificaciones con los miembros del equipo remoto.![Usar git push para publicar cambios](https://wac-cdn.atlassian.com/dam/jcr:f148974e-7d4d-4c0e-bd31-8ac5467d1e6a/04.svg?cdnVersion=1379)

![](https://3089493477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MO778ZqK_vdCAm4D0yl%2F-MOpDZMLAm6RrWXrftiY%2F-MOpNsOq9B458NvmoYqL%2Fpush.png?alt=media\&token=29958fce-ec91-4803-ab79-5214b5e0d682)

El diagrama anterior muestra lo que sucede cuando su local `master`ha progresado más allá del repositorio central `master`y usted publica los cambios ejecutando `git push origin master`. Observe cómo `git push`es esencialmente lo mismo que ejecutar `git merge master`desde el interior del repositorio remoto.

### Git push y sincronización

`git push`es uno de los muchos componentes que se utilizan en el proceso general de "sincronización" de Git. Los comandos de sincronización operan en ramas remotas que se configuran mediante el [`git remote`](https://www.atlassian.com/git/tutorials/syncing) comando. `git push`se puede considerar un comando 'cargar' mientras que, [`git fetch`](https://www.atlassian.com/git/tutorials/syncing/git-fetch) y [`git pull`](https://www.atlassian.com/git/tutorials/syncing/git-pull) se puede considerar como comandos 'descargar'. Una vez que los conjuntos de cambios se han movido a través de una descarga o carga, [`git merge`](https://www.atlassian.com/git/tutorials/using-branches/git-merge) se puede realizar una en el destino para integrar los cambios.

### Empujar a repositorios desnudos

Una práctica moderna de Git que se usa con frecuencia es tener un `--bare`repositorio alojado de forma remota que actúe como un repositorio de origen central. Este repositorio de origen a menudo se aloja fuera del sitio con un tercero de confianza como Bitbucket. Dado que la inserción de problemas con la estructura de la rama remota, es más seguro y común enviar a los repositorios que se han creado con la `--bare`bandera. Los repositorios desnudos no tienen un directorio de trabajo, por lo que una inserción no alterará el contenido del directorio de trabajo en curso. Para obtener más información sobre la creación de repositorios básicos, lea sobre [`git init`](https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init).

### Fuerza empujando

Git evita que sobrescriba el historial del repositorio central al rechazar las solicitudes de inserción cuando dan como resultado una combinación que no es de avance rápido. Por lo tanto, si el historial remoto ha diferido de su historial, debe extraer la rama remota y fusionarla con la local, luego intente presionar nuevamente. Esto es similar a cómo SVN lo sincroniza con el repositorio central a través de `svn update`antes de confirmar un conjunto de cambios.

La `--force`bandera anula este comportamiento y hace que la rama del repositorio remoto coincida con la local, eliminando cualquier cambio ascendente que pueda haber ocurrido desde la última vez que lo extrajo. La única vez que debería necesitar forzar el empuje es cuando se da cuenta de que las confirmaciones que acaba de compartir no eran del todo correctas y las solucionó con una `git commit --amend`o una rebase interactiva. Sin embargo, debes estar absolutamente seguro de que ninguno de tus compañeros de equipo ha realizado esas confirmaciones antes de usar la `--force`opción.

### Ejemplos

### Git push predeterminado

El siguiente ejemplo describe uno de los métodos estándar para publicar contribuciones locales en el repositorio central. Primero, se asegura de que su maestro local esté actualizado al obtener la copia del repositorio central y reajustar sus cambios encima de ellos. La rebase interactiva también es una buena oportunidad para limpiar sus confirmaciones antes de compartirlas. Luego, el `git push`comando envía todas las confirmaciones en su maestro 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 aseguramos de que el maestro local estuviera actualizado, esto debería dar como resultado una fusión de avance rápido y `git push`no debería quejarse de ninguno de los problemas que no son de avance rápido discutidos anteriormente.

### Empuje de fuerza modificado

El [`git commit`](https://www.atlassian.com/git/tutorials/saving-changes/git-commit) comando acepta una `--amend`opción que actualizará la confirmación anterior. Una confirmación a menudo se modifica para actualizar el mensaje de confirmación o agregar nuevos cambios. Una vez que se modifica una confirmación `git push`, fallará porque Git verá la confirmación modificada y la confirmación remota como contenido divergente. La `--force`opción debe usarse para enviar una confirmación modificada.

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

El ejemplo anterior asume que se está ejecutando en un repositorio existente con un historial de confirmación. `git commit --amend`se utiliza para actualizar la confirmación anterior. La confirmación modificada se fuerza a empujar usando la `--force`opción.

### Eliminar una rama o etiqueta remota

A veces, las sucursales deben limpiarse con fines de contabilidad o de organización. Para eliminar completamente una rama, debe eliminarse localmente y también de forma remota.

```
git branch -D branch_name
git push origin :branch_name
```

Lo anterior eliminará la rama remota denominada branch\_name pasando un nombre de rama con el prefijo de dos puntos para `git push`eliminar la rama remota.
