Utilisation de la commande git push

git push <remote> <branch>

La commande ci-dessus fait un push de la branche spécifiée vers , avec tous les commits et objets internes nécessaires. Cela crée une branche locale dans le dépôt cible. Pour éviter toute suppression de commits, Git ne vous autorise pas à faire un push si cela engendre un merge sans fast-forward dans le dépôt cible.

git push <remote> --force

Identique à la commande ci-dessus, mais le push est forcé même s'il entraîne un merge sans fast-forward. N'utilisez pas le flag --force si vous n'êtes pas absolument sûr de ce que vous faites.

git push <remote> --all

Pushe toutes vos branches locales vers le remote spécifié.

git push <remote> --tags

Lorsque vous faites un push d'une branche ou que vous utilisez l'option --all, le push des tags n'est pas automatique. Le flag --tags envoie tous vos tags locaux vers le dépôt distant.

Discussion sur la commande git push

git push est la commande la plus couramment utilisée pour publier des changements locaux et les charger vers un dépôt centralisé. Après qu'un dépôt local a été modifié, un push est exécuté pour partager les changements avec les membres de l'équipe distants.

Utilisation de git push pour publier des changements

Le schéma ci-dessus montre ce qui arrive lorsque votre branche master locale évolue par rapport à la branche master du dépôt centralisé et que vous publiez des changements en exécutant git push origin master. Vous noterez que git push est pratiquement identique à git merge master à l'intérieur du dépôt distant.

Git push et synchronisation

Faire un push vers des dépôts bruts

Push forcé

Git vous empêche d'écraser l'historique du dépôt centralisé en refusant les push requests si celles-ci entraînent un merge sans fast-forward. Par conséquent, si l'historique distant a divergé par rapport au vôtre, vous devez faire un pull de la branche distante et la merger dans votre branche locale, avant de tenter un nouveau push. Ce processus est similaire à celui de SVN lorsque vous exécutez svn update afin de synchroniser votre dépôt avec le dépôt centralisé avant de commiter un ensemble de changements.

Le flag --force outrepasse ce comportement et fait correspondre la branche du dépôt distant avec votre branche locale, supprimant au passage les changements en amont qui ont pu être effectués depuis le dernier pull. La seule situation dans laquelle vous devez faire un force push est lorsque vous vous rendez compte que les commits que vous venez de partager ne sont pas totalement corrects et que vous les avez corrigés avec git commit --amend ou un rebase interactif. Cependant, vous devez être absolument certain qu'aucun de vos coéquipiers n'a fait un pull de ces commits avant d'utiliser l'option --force.

Exemples

Git push par défaut

L'exemple suivant décrit l'une des méthodes standard pour publier des contributions locales dans le dépôt centralisé. Tout d'abord, vous devez vous assurer que votre branche master locale est à jour en faisant un fetch de la copie du dépôt centralisé et en faisant un rebase de vos changements par-dessus. Le rebase interactif est également une bonne occasion de nettoyer vos commits avant de les partager. Ensuite, la commande git push envoie tous les commits sur votre branche master locale vers le dépôt centralisé.

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

Comme nous avons déjà vérifié que la branche master locale était à jour, cette opération devrait entraîner un merge en fast-forward, et git push ne devrait pas réagir aux problèmes d'absence de fast-forward que nous avons vus plus haut.

Force push modifié

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

Les exemples ci-dessus partent du principe que la commande est exécutée sur un dépôt existant, qui dispose d'un historique des commits. git commit --amend permet de mettre à jour le commit précédent. On réalise ensuite un force push du commit modifié à l'aide de l'option --force.

Suppression d'une branche distante ou d'un tag

Parfois, il est nécessaire de nettoyer les branches à des fins d'archivage ou d'organisation. Afin de supprimer entièrement une branche, celle-ci doit être supprimée en local et à distance.

git branch -D branch_name
git push origin :branch_name

La commande ci-dessus va supprimer la branche distante appelée « branch_name ». Pour supprimer la branche distante, vous devez transmettre un nom de branche précédé d'un double point à git push.