# Poussée de commits vers un dépôt distant

Utilisez git push pour envoyer (push) des validations (commits) effectuées sur votre branche locale vers un référentiel distant.

## À propos de `git push`

La commande `git push` prend deux arguments :

* Un nom de dépôt distant, par exemple `origin`
* Un nom de branche, par exemple `main`

Par exemple :

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

Par exemple, vous exécutez généralement `git push origin main` pour pousser vos modifications locales vers votre dépôt en ligne.

## Renommage des branches

Pour renommer une branche, vous utilisez la même commande `git push`, mais vous ajoutez un autre argument : le nom de la nouvelle branche. Par exemple :

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

Cela transfère `LOCAL-BRANCH-NAME` vers votre `REMOTE-NAME`, mais il est renommé comme `REMOTE-BRANCH-NAME`.

## Gestion des erreurs autres que de type avance rapide

Si votre copie locale d’un dépôt n’est pas synchronisée avec le dépôt en amont vers lequel vous poussez, ou se trouve « derrière » celui-ci, vous obtiendrez un message indiquant `non-fast-forward updates were rejected`.
Cela signifie que vous devez récupérer, ou « extraire », les modifications en amont avant de pouvoir pousser vos modifications locales.

Pour plus d’informations sur cette erreur, consultez [Gestion des erreurs autres que de type avance rapide](/fr/enterprise-server@3.22/get-started/using-git/dealing-with-non-fast-forward-errors).

## Poussée de balises

Par défaut, et sans paramètres supplémentaires, `git push` envoie toutes les branches correspondantes qui ont les mêmes noms que les branches distantes.

Pour remiser une seule balise, vous pouvez utiliser la même commande que pour remiser une branche :

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

Pour pousser toutes vos balises, vous pouvez taper la commande :

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

## Suppression d’une branche ou balise distante

La syntaxe de suppression d’une branche est un peu obscure à première vue :

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

Notez qu’il y a un espace avant le signe deux-points. La commande ressemble aux mêmes étapes que celles que vous devez effectuer pour renommer une branche. Toutefois, ici, vous dites à Git de ne *rien* pousser dans `BRANCH-NAME` vers `REMOTE-NAME`. En raison de cela, `git push` supprime la branche sur le dépôt distant.

## Dépôts distants et duplications

Vous savez peut-être déjà que [ vous pouvez « fork » référentiels](https://guides.github.com/overviews/forking/) sur GitHub.

Lorsque vous clonez un dépôt que vous possédez, vous lui fournissez une URL distante qui indique à Git où extraire et pousser des mises à jour. Si vous souhaitez collaborer avec le dépôt d’origine, vous ajoutez une nouvelle URL distante, généralement appelée `upstream`, à votre clone Git local :

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

Vous pouvez maintenant récupérer des mises à jour et des branches à partir de *leur* fork.

```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
```

Lorsque vous avez terminé d’apporter des modifications locales, vous pouvez pousser votre branche locale vers GitHub et [lancer une demande de tirage](/fr/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).

Pour plus d’informations sur l’utilisation de forks, consultez [Synchronisation d’une duplication](/fr/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).

## Pour aller plus loin

* [Chapitre « Distants » du livre « Pro Git »](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
* [Page principale `git remote`](https://git-scm.com/docs/git-remote.html)
* [Aide-mémoire Git](/fr/enterprise-server@3.22/get-started/git-basics/git-cheatsheet)
* [Flux de travail Git](/fr/enterprise-server@3.22/get-started/git-basics/git-workflows)
* [Manuel Git](https://guides.github.com/introduction/git-handbook/)