# Subir confirmaciones de cambios a un repositorio remoto

Usa git push para insertar confirmaciones realizadas en la rama local en un repositorio remoto.

## Acerca de `git push`

El comando `git push` toma dos argumentos:

* Un nombre remoto, por ejemplo, `origin`
* Un nombre de rama, por ejemplo, `main`

Por ejemplo:

```shell
git push REMOTE-NAME BRANCH-NAME
```

Por ejemplo, normalmente se ejecuta `git push origin main` para insertar los cambios locales en el repositorio en línea.

## Renombrar ramas

Para cambiar el nombre de una rama, tendría que usar el mismo comando `git push`, pero agregar un argumento más: el nombre de la nueva rama. Por ejemplo:

```shell
git push REMOTE-NAME LOCAL-BRANCH-NAME:REMOTE-BRANCH-NAME
```

Esto inserta `LOCAL-BRANCH-NAME` en `REMOTE-NAME`, pero se cambia el nombre a `REMOTE-BRANCH-NAME`.

## Abordar errores sin avance rápido

Si la copia local de un repositorio está desincronizada, o "atrasada", con respecto al repositorio ascendente al que se realiza la inserción, recibirá un mensaje en el que se indica `non-fast-forward updates were rejected`.
Esto significa que debe recuperar los cambios ascendentes antes de poder insertar los cambios locales.

Para más información sobre este error, consulta [Tratamiento de errores sin avance rápido](/es/enterprise-server@3.22/get-started/using-git/dealing-with-non-fast-forward-errors).

## Subir etiquetas

De manera predeterminada, y sin parámetros adicionales, `git push` envía todas las ramas que coinciden para que tengan el mismo nombre que las ramas remotas.

Para subir una etiqueta única, puedes emitir el mismo comando que al subir una rama:

```shell
git push REMOTE-NAME TAG-NAME
```

Para subir todas tus etiquetas, puede escribir el comando:

```shell
git push REMOTE-NAME --tags
```

## Eliminar una rama remota o etiqueta

La sintaxis para borrar una rama es un poco críptica a primera vista:

```shell
git push REMOTE-NAME :BRANCH-NAME
```

Nota que hay un espacio antes de los dos puntos. El comando se parece a los mismos pasos que realizaría para cambiar el nombre de una rama. Pero aquí le indica a Git que no inserte *nada* en `BRANCH-NAME` en `REMOTE-NAME`. Por este motivo, `git push` elimina la rama en el repositorio remoto.

## Remotos y bifurcaciones

Es posible que ya sepas que [puedes "bifurcar" repositorios](https://guides.github.com/overviews/forking/) en GitHub.

Al clonar un repositorio de su propiedad, le proporciona una URL remota que le indica a Git dónde recuperar e insertar las actualizaciones. Si quiere colaborar con el repositorio original, tendría que agregar una nueva URL remota, normalmente llamada `upstream`, al clon de Git local:

```shell
git remote add upstream THEIR_REMOTE_URL
```

Ahora, puede capturar actualizaciones y ramas desde *su* bifurcación:

```shell
git fetch upstream
# Grab the upstream remote's branches
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://HOSTNAME/OCTOCAT/REPO
>  * [new branch]      main     -> upstream/main
```

Cuando haya finalizado los cambios locales, puede insertar la rama local en GitHub e [iniciar una solicitud de incorporación de cambios](/es/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).

Para más información sobre cómo trabajar con bifurcaciones, consulta [Sincronizar una bifurcación](/es/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).

## Información adicional

* [El capítulo "Remotes" del libro "Pro Git"](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
* [
  `git remote` Página principal](https://git-scm.com/docs/git-remote.html)
* [Guía rápida de Git](/es/enterprise-server@3.22/get-started/git-basics/git-cheatsheet)
* [Flujos de trabajo de Git](/es/enterprise-server@3.22/get-started/git-basics/git-workflows)
* [Manual de Git](https://guides.github.com/introduction/git-handbook/)